我有一个使用Next.js API的服务器,我想从那里向前端发送一个以特定于区域设置的编码(Shift_JIS)编码的.csv文件。
我的服务器目前使用这种方法:
download(res: NextApiResponse, buffer: Buffer, fileName: string) {
res.status(200)
res.setHeader('Content-Type', 'text/csv')
res.setHeader('Content-Disposition', 'attachment; filename="' + fileName + '"')
res.send(buffer)
}
查看服务器调试器中的日志,这部分似乎工作正常。
前端页面使用以下代码:
try {
const response = await api.getRequestCsv({
// insert necessary parameters here
})
console.log('tried', response)
} catch (e) {
console.log('caught', e)
}
API对象执行以下操作:此.request<{ /* @format binary */ file?:File },any >({ path:/safdsfa/download
,方法:'GET',查询:{code:'123'},格式:'json',})
在api.getRequestCsv()
中发送的GET请求正确解析,但是当我console.log
它时,我得到了这个(为了简洁和保密而删节):
Response {
data: null
error: "Unexpected token '�', "�v���W�F�N"... is not valid JSON"
body: ReadableStream
locked: true
bodyUsed: true
ok: true
status: 200
statusText: "OK"
type: "basic"
url: // insert intended URL here
}
我的怀疑是前端接收到响应,* 在某个地方 *,它将文件解析为UTF-8 JSON字符串,而它应该按原样下载流。
我如何强制前端下载响应中的文件,而不是假设它是一个JSON字符串并在不应该的时候解析它?
1条答案
按热度按时间wf82jlnq1#
我想好了服务器期望使用包含文件的JSON对象进行响应,而不是直接使用文件进行响应。我重写了后端响应:
并在前端做了一些复杂的事情,从那里提取缓冲区并在本地下载。