【问题标题】:Client side not getting download file from server客户端没有从服务器获取下载文件
【发布时间】:2021-08-21 16:46:56
【问题描述】:

我有一个快速服务器,它发回一个文件作为响应, 但问题是,我正在尝试从不同来源的客户端发出获取请求,我已经在我的服务器上启用了 cors,但我的客户端没有取回响应文件。 我在构建模块中使用express'sres.download(file) 发送文件。

我已经通过从不同来源向我的服务器发送post 请求来测试它,并且客户端得到了响应,但是当我发送一个下载文件的获取请求时,我的服务器收到了请求,但是它似乎客户端没有得到响应文件。

是否需要设置一些额外的标题才能使其正常工作?

代码服务器端:

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)
}

【问题讨论】:

  • 您在客户端遇到什么错误?
  • 您绝对应该分享代码的相关部分以获得更好的帮助。
  • 能否提供端点代码示例?
  • @mousetail 没有错误,只是客户端没有收到来自响应的文件
  • 那么响应到底有什么问题呢?是空的吗?是400错误吗?超时了吗?

标签: node.js express cors


【解决方案1】:

link 找到我的答案,显然这是因为 cors 只启用客户端可以从响应中访问的某些标头。

我需要的标头默认没有启用,我的客户端 javascript 代码需要该标头的值来完成下载。

所以我需要在我的服务器响应的标头中添加这个标头(Access-Control-Expose-Headers),其中允许标头的值与默认标头不同。

类似这样的:

res.setHeader('Access-Control-Expose-Headers','Content-Disposition')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    相关资源
    最近更新 更多