【发布时间】:2018-08-02 04:40:19
【问题描述】:
我想我在使用 XMLHttpRequest 时遇到问题,当我导航到 localhost/dashboard/downloadfile?file-name=hw3.txt 时,文件会在本地下载,但如果我使用函数 checkDownload() 来启动 XMLHttpRequest,则文件会下载不了。
这是我的客户端代码:
function checkDownload() {
const filename = "hw3.txt";
const xhr = new XMLHttpRequest();
xhr.responseType = "blob";
xhr.open('GET', `/dashboard/downloadfile?file-name=${ filename }`);
xhr.onreadystatechange = () => {
if(xhr.readyState === 4) {
if(xhr.status === 200) {
}
}
}
xhr.send();
}
然后这是我的服务器代码:
app.get('/dashboard/downloadfile', requiresLogin, (req, res) => {
const userid = req.user.id;
const filename = req.query['file-name'];
db.getFileKey([userid, filename], (keyres) => {
const params = {
Bucket: S3_BUCKET,
Key: keyres.rows[0].filekey,
};
res.setHeader('Content-disposition', `attachment; filename=${ filename }`);
res.setHeader('Content-type', `${ mime.getType(keyres.rows[0].filetype) }`);
s3.getObject(params, (awserr, awsres) => {
if(awserr) console.log(awserr);
else console.log(awsres);
}).createReadStream().pipe(res);
});
});
【问题讨论】:
-
错误是什么?
-
它不会抛出错误。客户端收到 200 响应,但没有下载任何文件。
-
好的,那么你已经在xhr对象中有页面,在.status的if里面试试console.log(xhr.responseText)
-
Xhr 不会下载文件,你应该放一个链接或者其他东西
-
文本文件在客户端控制台中正确打印,但下载仍然无法正常工作。我不认为链接不起作用,因为我正在使用服务器上的数据库来获取 s3 存储桶中的用户文件的文件密钥,并且需要进行用户验证。如果有什么办法,我肯定会尝试,但我不明白它是如何工作的
标签: javascript node.js express xmlhttprequest aws-sdk