【发布时间】:2019-11-01 22:02:00
【问题描述】:
我正在尝试创建一个 JSON 文件 sample.json,并且我正在尝试在我的 Spring Boot 后端控制器中创建此文件,并能够将其发送到我的 React 应用程序,它将触发将文件下载到客户端
我想确保我实际上是从 http get 请求给出的响应中返回实际文件,并且我想知道如何触发该实际响应的下载 反应
fetch('/api/download')
.then((res) => {
return res.blob();
}).then((body) => {
console.log(body);
setTimeout(() => {
URL.createObjectURL(body)
}, 300);
}).catch((error) => {
console.log(error);
})
我的最终目标是能够让后端生成的文件通过获取请求并能够触发下载,请告诉我这是怎么可能的。谢谢。
【问题讨论】:
-
为什么你的
fetch有一个then作为第二个处理程序不返回任何东西?fetch获取 URL 内容,第一个then获取结果网络对象,提取正文,然后转发。第二个then得到了那个身体,并且有效地什么都不做。是的,它“做”了一些事情,但是结果被丢弃了,因为(a)你没有返回任何东西,(b)“做”发生在超时,所以将在完全不同的范围内运行,并且完全独立于承诺链。为什么你的第二个then不是.then( body => URL.createObjectURL(body))? -
@Mike'Pomax'Kamermans 可以丢弃第二个 then 函数是我的 spring 代码返回一个实际文件,我如何能够用我返回的 body 触发下载?
-
在我们回答这个问题之前,您能否将您的问题缩小到或者询问服务器端或客户端代码?您的端点工作(它向您发送您需要的数据)并且与实际问题无关,或者您的客户端代码工作(我假设这是您遇到问题的部分)并且 it i> 不应该出现在帖子中。尽量保留您的问题as focused on only the problem at hand。
-
@Mike'Pomax'Kamermans 我已经编辑了这个问题,向您展示我的客户端代码是什么以及我如何尝试检索我制作的 JSON 文件的 blob,我想触发该文件的下载。
-
谢谢。顺便说一句,为什么是
setTimeout?您已经在异步工作了,那么您认为添加它有什么好处?
标签: java json reactjs spring-boot fetch