【发布时间】:2019-10-14 18:54:03
【问题描述】:
我正在使用 yii2 开发一个应用程序,我正在使用 PhpSpreadsheet 生成 (Excel) .xlsx 文件。当我使用 Chrome 下载生成的.xlsx 文件时,我无法使用 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 正在添加并因此损坏文件。 OpenOffice 的 Calc 可以读取它,但 Excel 无法打开它。
所以,我的问题是:为什么 Chrome 似乎在我的文件末尾添加了两个标签?我能做些什么来防止这种情况发生?
更新: 我已将问题缩小到“使用 Chrome 登录”(登录到 yii 应用程序,而不是 Chrome!)。含义:我可以使用 Firefox 和 Edge 下载并打开文件,登录或未登录 并且当我未登录时它可以与 Chrome 一起使用。我会责怪登录,但是当我使用 Firefox 或 Edge 下载它时,这也会损坏文件/添加 2 个额外的 09...
更新 2: 我已经安装了基于 Chromium 引擎的新 Edge 版本 78.0.276.17(官方构建)测试版(64 位):同样的问题! 登录:文件损坏。未登录:文件有效!
更新 3: 我测试了一个通过 FTP 上传的随机 file.txt,当我通过 yii 的 sendFile-Method 下载它时,文件末尾添加了 2 个选项卡:
public function actionTest(){
Yii::$app->response->sendFile('test.txt')->send();
return true;
}
如果我通过直接链接来下载文件,那就很好了。再次,它似乎是 Chromium、正在登录和 sendFile 方法的组合。
【问题讨论】:
-
您是说当您通过 chrome 下载时,这些选项卡包含在
.xlsx文件中?它是使用扩展名.xlsx生成的任何文件,还是仅针对.xlsx文件中的任何特定列表或内容生成的文件? -
不,我是说 Chrome 正在更改文件并添加这些选项卡。 (或者这就是你的意思?)它适用于任何
.xlsx文件我a)在服务器上生成b)在服务器上保存然后c)用Chrome 下载。内容似乎无关紧要/我已在表中添加和删除条目以更改文件(大小),但结果始终相同:当我使用 Chrome 下载时,文件末尾添加了两个选项卡. -
有什么方法可以分享一个链接,我可以通过我的 chrome 浏览器单击并下载文件并查看它是否复制?
-
你试过启动chromewithout extensions吗?
-
@MichalHynčica 是的,我已经尝试过了。我编辑了我的问题,因为我发现问题可以缩小到“使用 Chrome 登录”。当我没有使用 Chrome 登录时,该文件有效。
标签: php excel google-chrome yii2