Почему Chrome добавляет две вкладки в конец моего файла xlsx и этим портит файлы? - PullRequest
2 голосов
/ 14 октября 2019

Я занимаюсь разработкой приложения для yii2 и использую PhpSpreadsheet для генерации (Excel) .xlsx файлов. Когда я загружаю сгенерированный файл .xlsx с помощью Chrome, я не могу открыть его в Excel (2019), поскольку Excel сообщает, что файл поврежден, предлагает восстановить его, но не удается.

Сначала я подозревал, что что-то не такс генератором или процессом загрузки, но я протестировал загрузку с помощью Firefox, Edge и Filezilla - все работает как положено.

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

786d 6c2e 7265 6c73 504b 0506 0000 0000
0b00 0b00 d102 0000 671d 0000 0000 

, но Chrome-Download показывает

786d 6c2e 7265 6c73 504b 0506 0000 0000
0b00 0b00 d102 0000 671d 0000 0000 0909

Понятия не имею, откуда взялись эти дополнительные 09. Это две вкладки (09), которые Chrome добавляет и таким образом портит файл. Calc OpenOffice умеет читать, но Excel просто не может его открыть.

Итак, опять мой вопрос: почему Chrome добавляет две вкладки в конец моего файла? И что я могу сделать, чтобы предотвратить это?

Обновление: Я сузил проблему до "залогинен в Chrome" (вошел в приложение yii, а не в Chrome!). Значение: я могу скачать и открыть файл с помощью Firefox и Edge, вошли в систему или не вошли в систему и , она работает с Chrome, когда я не вошел в систему. Я бы винил логин, нотогда это также должно повредить файл / добавить 2 дополнительные 09 при загрузке его с помощью Firefox или Edge ...

Обновление 2: Я установил новую версию Edge 78.0.276.17 (Официальныйbuild) бета-версия (64-разрядная), основанная на Chromium Engine: Та же проблема! Вход в систему: Файл поврежден. Не залогинен: файл работает!

Обновление 3: Я протестировал случайный файл file.txt, который я загрузил через FTP, и в конце файла добавлены 2 вкладки, когдая загружаю его с помощью метода sendFile в yii:

public function actionTest(){
   Yii::$app->response->sendFile('test.txt')->send();
   return true;
}

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

1 Ответ

1 голос
/ 15 октября 2019

И решение:

Мой файл переводов i8n .../frontend/languages/de-DE/app.php имел две вкладки перед <?php, как предложено @ MichalHynčica! Удаление этих двух вкладок привело к прекрасной загрузке файлов.

Редактировать: В дополнение к этому механизм Chromium, похоже, игнорирует длину содержимого, определенную в заголовке HTTP, и фактическую длину содержимого загружаемого файла.

Спасибо и спокойной ночи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...