Jump to content

При скачивании больших файлов они обрезаются.

Featured Replies

Posted
comment_201858

В приложении Загрузки выложены большие файлы, размером до 900мб. Раньше всё работало нормально, люди точно их скачивали. А сейчас стали жаловаться что файлы битые. Я проверил - файлы обрезаются на 500 МБ (524 935 361 байт). Движок был 4.7.15, обновление до 4.7.16 не помогло.

В настройках вроде бы нигде нет лимита (да и было бы предупреждение, а не так что половина файла скачалась и обрыв).

В логах в админке никаких событий в это время не было.

В админке изучил отчёт phpinfo - нигде никаких лимитов в районе 500 МБ там нет.

Выключил в настройках антилич-защиту - не помогло.

Через Download Master в многопоточном режиме файл качается нормально. Урезал настройки Download Master для однопоточного скачивания - через 500 МБ - Socket disconnected.

Куда копать?

  • Author
comment_201860
37 минут назад, Zero108 сказал:

Что там с таймаутами у веб-сервера?

Где их смотреть? Виртуальный хостинг, cPanel, LiteSpeed.

Но врядли в таймаутах дело, канал до сервера медленный, скорость в разное время - весьма разная, но во всех опытах файл обрезается чётко на 500мб.
При зажатии скорости в файлокачалке - эти 500мб качает соответственно в несколько раз дольше, но так же упирается именно в 500мб (потом - обрыв и начинает докачку).
Взаимосвязи со временем явно нет, взаимосвязь только с размером.

comment_201861

Хостеру напиши. Вероятно, поставили лимит, чтобы пользователи оперативу не потребляли сверх нормы.

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

  • Author
comment_201862
3 часа назад, Zero108 сказал:

Хостеру напиши.

Пока ничего внятного не ответили, сказали типа поднимите post_max_size upload_max_filesize - но у меня там было 192M, а файл режется на 500M. Написал в этих опциях 900M, через phpinfo() вижу что 900M установлено. Но итог прежний. Из IPS файлы обрезаются на 500мб.

 

3 часа назад, Zero108 сказал:

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

А так файлы более 500мб нормально скачиваются. Значит виноват либо php либо баг в IPS последних версий...

И что делать дальше?

comment_201871

У тебя в приложении Загрузки (Downloads) эти проблемные файлы загружены в базу данных или добавлены по прямым ссылкам? Если по ссылкам, куда ведут эти ссылки: на твой сервер или в облачное хранилище?

  • Author
comment_201873

Стало понятно что дело не в IPS. Через php-скрипты не отдаются файлы более 500мб.

Даже в Wordpress плагины для файлового архива, тоже отдающие файлы через php, в итоге на 500мб обрезают отдачу файла.

Весь гугл заспамлен проблемой аплоада файлов через php, но с аплоадом у меня всё нормально. В тот же IPS я спокойно заливаю файл на 800мб, он на диске виден что 800, а скачать обратно через php - режется на 500.

Какой-то лимит у хостера, ищут проблему.

comment_201874

Так вы базу данных закачиваете эти файлы? Я больше 100 мегабайт в базу данных не закачиваю. Файлы до 3 ГБ скачиваются по ссылкам с диска.

  • Author
comment_201876
14 минут назад, Zero108 сказал:

Так вы базу данных закачиваете эти файлы?

Не в базу, всё на диске лежит.

IPS модуль Загрузки кажется вообще давно разучился закачивать файлы в базу, только на диск. Где у него такая настройка?

38 минут назад, Zero108 сказал:

Файлы до 3 ГБ скачиваются по ссылкам с диска.

А как это сделать? Вроде всё в админке облазил - не нашёл.

Опция анти-лич (Сообщество - ЗАГРУЗКИ - Настройки - Основные настройки) не влияет никак. Из каталога загрузок файлы в любом случае отдаётся php-скриптом, прямой ссылки на файл пользователю не показывается.

comment_201877
32 минуты назад, f2065 сказал:

А как это сделать?

UserBrave.thumb.jpg.f63b9f9672df9dc2202b3055b4418484.jpg

image.thumb.jpeg.6ff34af0b3b748abb216a80b2a753962.jpeg

У меня для скачивания по URL используются абсолютные ссылки. Не помню, можно ли использовать относительные.

comment_201878

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

При скачивании больших файлов они обрезаются. - Техническая поддержка Invision Community - IPBMafia.ru - поддержка Invision Community, релизы, темы, плагины и приложения – Brave.jpg

Edited by Zero108

  • Author
comment_201879

Не, файлы в файловой системе. Это задаётся в разделе Система - Обзор - Файлы - Настройки хранения. Там у меня всех хранений созданы конфигурации в папках файловой системы, SQL нигде не используется.

Вобщем файлы сейчас физически лежат в файловой системе (правда имена у них хэшированые). Но модуль Загрузки их отдаёт только через php (видимо для детального учёта статистики). Вопрос в том как бы заставить IPS Загрузки отдавать файлы напрямую, не прогоняя через php. Перезагружать всё и прописывать URL - это не выход, хотелось бы как-то глобально в админке. Да и хэширование имён тоже препятствует простому созданию ссылок.

comment_201884

Поменять систему загрузки для downloads. Если у вас nginx, то отдавать с заголовком X-Accel-Redirect. 

 

comment_201886

У меня так было сделано одно время, на 3.х 

В server{} nginx создаем

location /uploads {
                       root /home/user/;
                       internal;
}

root указывает на корневую директорию форума. Рестартуем nginx.

в app../downloads/modules/front/downloads/view.php перед 

/* Print the file, honoring ranges */

вставляем

header("X-Accel-Redirect: /uploads/" . $file->container.'/'.$file->filename;);
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $file->originalFilename);
exit;

После этого файлы будет отдавать nginx, а не движок форума. 

Edited by Desti

comment_201887

Если хочется отдавать контент по типу, то заменить вторую строку на

header('Content-Type: '.\IPS\File::getMimeType( $file->originalFilename ));

comment_201888

Desti так в чем проблема то отдавать через движок? Что мешает в данном случае? Вот городить костыли не хочется, если честно. Забыть легко потом после обновления.

  • Author
comment_201899

Решение проблемы - техподдержка хостера увеличила следующие параметры веб-сервера LiteSpeed

maxReqBodySize: 500M -> 1024M
maxDynRespSize: 500M -> 1024M
И тогда php нормально отдаёт файлы более 500мб...

 

comment_201900
3 часа назад, Zero108 сказал:

так в чем проблема то отдавать через движок? Что мешает в данном случае? Вот городить костыли не хочется, если честно. Забыть легко потом после обновления

Не хочется - не городите, какая проблема. 

8 часов назад, f2065 сказал:

Вопрос в том как бы заставить IPS Загрузки отдавать файлы напрямую, не прогоняя через php.

Это был ответ на вопрос. 

comment_201903
1 час назад, f2065 сказал:

параметры веб-сервера LiteSpeed

Этим софтом мало кто пользуется, но за инфу спасибо. 

comment_201904
1 час назад, f2065 сказал:

maxReqBodySize

Ну, собственно, вот аналогичный случай. Издержки дешевых хостингов. 

https://wordpress.org/support/topic/large-digital-file-downloads-ending-early-at-500mb/

Edited by Zero108

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.


Guest
Ответить в этой теме...

Последние посетители 0

  • No registered users viewing this page.