Node.js 客户端未从服务器获取下载文件
我得到了一个express服务器,它发送一个文件作为响应, 但问题是,我正在尝试从具有不同来源的客户端执行get请求,我已经在服务器上启用了cors,但是我的客户端没有返回响应文件。 我正在使用Node.js 客户端未从服务器获取下载文件,node.js,express,cors,Node.js,Express,Cors,我得到了一个express服务器,它发送一个文件作为响应, 但问题是,我正在尝试从具有不同来源的客户端执行get请求,我已经在服务器上启用了cors,但是我的客户端没有返回响应文件。 我正在使用express的内置模块,res.download(file)发送文件 我已经通过从不同来源向服务器发送post请求对其进行了测试,客户端得到了响应,但当我发送get请求下载文件时,服务器收到了请求,但客户端似乎没有收到响应文件 我是否需要设置一些额外的标题来实现此功能 代码服务器端: const cor
express的
内置模块,res.download(file)
发送文件
我已经通过从不同来源向服务器发送post
请求对其进行了测试,客户端得到了响应,但当我发送get请求下载文件时,服务器收到了请求,但客户端似乎没有收到响应文件
我是否需要设置一些额外的标题来实现此功能
代码服务器端:
const cors = require('cors')
app.use(cors())
app.get("/download/:downloadId",async (req,res) => {
let downloadId = req.params.downloadId;
console.log(downloadId)
let fileName = glob(MYPATH,{},(err,files) =>{
// res.setHeader('Access-Control-Allow-Origin', '*');
res.download(files[0],"filename",{headers:{'Access-Control-Allow-Origin':"*"}})
})
})
代码客户端:
const getFileName = (header) => {
const fileName = header.headers.get('content-disposition').split('filename=')[1].slice(1,-1)
return fileName
}
const downloadFile = async () => {
let file = await fetch(`${urlDownload}/` + downloadUserId )
let blobObj = {
filename:getFileName(file),
blob:await file.blob()
}
console.log(blobObj)
}
从中找到了我的答案,显然是因为cors只启用客户端可以从响应中访问的某些头
默认情况下,我需要的头没有启用,我的客户端javascript代码需要该头的值来完成下载
因此,我需要在服务器响应的头中添加这个头(accesscontrolexpose Headers
),允许的头的值与默认头的值不同
大概是这样的:
res.setHeader('Access-Control-Expose-Headers','Content-Disposition')
您在客户端遇到了什么错误?您肯定应该共享代码的相关部分以获得更好的帮助。您可以提供端点代码示例吗?@mousetail没有错误,只是客户端没有从响应接收到文件。响应到底出了什么问题?是空的吗?这是400错误吗?超时了吗?