最近在工作中遇到了文件下载的需求,
期初以为也很简单,
DownloadController
package com.example.duohoob.controller;
import java.io.File;
import java.io.FileInputStream;
import java.net.URLEncoder;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
import org.springframework.http.HttpHeaders;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author yangwei
* @date 2022年11月3日
*/
@RestController
public class DownloadController {
/**
* 下载
* @author yangwei
* @date 2022年11月7日
* @param response
* @throws Exception
*/
@RequestMapping("/download")
public void download(HttpServletResponse response) throws Exception {
response.setCharacterEncoding("utf-8");
response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode("temp.txt", "utf-8"));
// 注意,就是这一句,10k!
response.setHeader(HttpHeaders.CONTENT_LENGTH, String.valueOf(10240));
// temp.txt文件大小在5k左右
File file = new File("D:\\doc\\temp.txt");
FileInputStream fis = new FileInputStream(file);
ServletOutputStream sos = response.getOutputStream();
IOUtils.write(IOUtils.toByteArray(fis), sos);
}
}
启动后访问,localhost:8080/download
请求处理完后,postman 一直在等待,
response的head儿中设置了content-length,导致写出的数据不相等时,
postman 便一直等待,直至超时,
已写出的数据就是byte字节数组,后台已经处理完并且return。
这样奇怪的问题我还是第一次遇到,
在浏览器是这样,
我还以为是文件有问题,找了半天也不知道是什么原因,
后来发现了之前别人留下的这一行。。。
response.setHeader(HttpHeaders.CONTENT_LENGTH, String.valueOf(10240));
我***!
这一句在header中设置了内容的大小Content-Length是10240个字节,
是10k,temp.txt文件大小在5k左右,这就导致response以为没下完,文章来源:https://www.toymoban.com/news/detail-797342.html
便一致在等待,当然是等不到什么结果的,
后来把这一行去掉问题解决了。文章来源地址https://www.toymoban.com/news/detail-797342.html
到了这里,关于response的Content-Length设置错误,导致springboot文件下载,代码已经return,postman一直等待到超时的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!