Я занимаюсь разработкой приложения для 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-метод.