LINUX.ORG.RU
ФорумAdmin

Загрузка файла, не работает X-Accel-Redirect

 ,


0

2

Приветствую!

Появилась проблема с загрузкой файла, уже не пару часов провел в решении проблемы и гугления, так ее и не решил.

И так.

Файлы загружаются на сервер в каталог /var/www/servers/file/{при загрузке файла создается папка - имя папки хеш}/filename.txt

Ссылка на файл имеет вид http://example.com/file/{random_string}/{хеш созданной папки}/filename.txt

Т.е. на обработчик получаем три параметра: random_string, hash_folder, namefile. Проверяем в базе random_string и hash_folder, после отдаем файл на скачивание с помощью заголовка header(«X-Accel-Redirect: {$path}»)

В итоге ничего не получается, все время ошибка 404, в логах пусто.

Локейшн

location /file/ { rewrite /file/(.*)/(.*)/(.*) /downloadDirect.php?link=$1&link2=$2&name=$3 last; }

Пробовал разные варианты и не один не подошел. Указали на secure_link, но для моего примера, когда файлы хранятся ниже директори сайта, так и не смог сделать.

Буду очень благодарен за помощь.

Скрипт возвращает nginx-у заголовок X-Accel-Redirect с указанием файла который нужно отдать. location для таких файлов должен иметь диррективу «internal»

        location /cachedir/ {
                internal;
                rewrite ^/cachedir(.*)$ $1 break;
                root '/opt/SDO2/moodledata';
                fastcgi_store   off;
                sendfile        on;
         }

vel ★★★★★
()
Ответ на: комментарий от vel

Спасибо за помощь, все сделал. Еще одна проблема появилась, если имя файла содержит пробелы, то обрезается им до первого пробела. Например есть файл SICP Russian.pdf, а скачивается SIСP только. Также не скачиваются файлы с именем на русском языке.

Заголовки

header(«Content-type: ».mime_content_type($path)); header(«Content-Disposition: attachment; filename=».basename($path)); header('Content-Length: ' . filesize($path)); header(«X-Accel-Redirect: /files/» . $row['location'].«/».basename($path));

Лог показывает для русских имен

[error] 19253#0: *159 open() «/var/www/servers/files/GD9KWHZ0v9HjCHSvkDlW7iwi9qrIxFwo/сетей.zip» failed (2: No such file or directory)

Как это можно исправить?

isamitakata
() автор топика
Ответ на: комментарий от isamitakata

С пробелами решил изменив заголовок на header(«Content-Disposition: attachment; filename=\»$filename\""); , с русскими именами к сожалению еще нет.

isamitakata
() автор топика
Ответ на: комментарий от isamitakata

Решил вопрос установив локаль

setlocale(LC_CTYPE, 'en_US.UTF8');

isamitakata
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.