【发布时间】:2019-08-04 22:42:34
【问题描述】:
我的 express.js 代码很简单:
app.get("/download", download);
和
export let download = async (req: Request, res: Response) => {
const file = "/tmp/my-file.zip";
res.download(file);
}
我的客户端代码也很简单:
import axios from "axios";
const fileDownload = require("js-file-download");
axios.get("/download").then(response => {
fileDownload(response.data, "export.zip");
});
从浏览器下载时,文件已损坏,无法打开。原来的/tmp/my-file.zip 是119506 字节。奇怪的是,下载的export.zip 是216980 字节。我目前在本地运行所有内容,因此没有操作系统差异可以解释这一点。
为什么我的文件大小不同(导致 .zip 文件损坏),我该如何解决?
编辑 - 这些是浏览器标题:
accept-ranges: "bytes"
cache-control: "no-store, no-cache, must-revalidate, proxy-revalidate"
connection: "keep-alive"
content-disposition: "attachment; filename="my-file.zip""
content-length: "119506"
content-type: "application/zip"
date: "Thu, 14 Mar 2019 06:04:28 GMT"
etag: "W/"1d2d2-1697acd3f53""
expires: "0"
last-modified: "Thu, 14 Mar 2019 06:04:25 GMT"
pragma: "no-cache"
referrer-policy: "no-referrer"
surrogate-control: "no-store"
x-content-type-options: "nosniff"
x-frame-options: "SAMEORIGIN"
x-xss-protection: "1; mode=block"
【问题讨论】:
-
您得到的响应类型是 json 吗?
-
我已经编辑了我的问题以包含浏览器标题。它应该是一个基于内容类型的 zip 文件。
-
如果你只是用浏览器导航到
/download会发生什么? -
@felixmosh 很好的测试,效果很好。我猜 axios 或 js-file-download 是改变文件的东西。
-
那么为什么要通过ajax来使用呢?只需在上面放一个带有
download属性的链接,它就会下载文件:]
标签: javascript node.js express