Загрузки начинают заключаться в кавычки - PullRequest
0 голосов
/ 25 февраля 2019

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

Мы недавно обновили наш сервер до PHP 7.2 и думаем, что это может быть причиной изменения.но хотел узнать, может ли кто-нибудь знать наверняка.

Мы запускаем приложение Laravel 5.5 на сервере Ubuntu с PHP 7.2, и оно работает и не работает в Chrome (основной браузер, который мы используем)

Следующий код работал отлично в течение нескольких месяцев:

$file = Storage::disk('s3')->get($location);

$headers = [
        'Content-Type' => 'xml',
        'Content-Description' => 'File Transfer',
        'Content-Disposition' => "attachment; filename='" . $realName . "'",
        'filename'=> $realName
    ];

return response($file, 200, $headers);

Это приведет к загрузке example.xml fine

Однако недавно он начал загружать 'example.xml', требуя от меняудалите кавычки к этому:

$file = Storage::disk('s3')->get($location);

$headers = [
        'Content-Type' => 'xml',
        'Content-Description' => 'File Transfer',
        'Content-Disposition' => 'attachment; filename=' . $realName,
        'filename'=> $realName
    ];

return response($file, 200, $headers);

Я видел эту проблему с несколькими типами файлов и поэтому не связан с типом файлов.

Я просто пытаюсь выяснить причину этой проблемы, особеннопоскольку включение цитат из того, что я понимаю, необходимо для обратной совместимости с браузером.

** Обновление **

Я нашел этот связанный вопрос, но он не отвечает на вопрос, который мне нужен:

PDF-файлы, заключенные в одинарные кавычки?

** Обновление 2 **

Я протестировал цитаты подписчиков в нескольких браузерах, и он не работает с Chrome и Firefox, но работает с Internet Explorer и Edge в текущих версиях.

1 Ответ

0 голосов
/ 25 февраля 2019

Попробуйте это:

'Content-Disposition' => "attachment; filename=\"$realName\"",

Может показаться, что указание имени файла одинарными кавычками недопустимо: https://stackoverflow.com/a/31976390/6038111

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

Редактировать: Это действительно выглядитChrome 72 изменил свое поведение: https://bugs.chromium.org/p/chromium/issues/detail?id=927913


Еще одна альтернатива, специфичная для Laravel, - это встроенные методы загрузки файлов, которые являются частью системы хранения.Таким образом, вам не нужно думать об одинарных или двойных кавычках:

return Storage::disk('s3')->download($location, $realName, [
    'Content-Type' => 'text/xml',
    'Content-Description' => 'File Transfer',
]);

Примечание. Сначала файл будет загружен на ваш сервер, а затем отправлен пользователю (как ваш код),что добавляет задержку из-за дополнительной поездки.Любой, кто приходит сюда из Google, может захотеть проверить url() и temporaryUrl(), доступные с S3, Rackspace и любыми другими драйверами файловой системы, которые его поддерживают: https://laravel.com/docs/5.7/filesystem#file-urls

...