最近在工作中遇到了文件下載的需求,
期初以為也很簡單,
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兒中設(shè)置了content-length,導(dǎo)致寫出的數(shù)據(jù)不相等時,
postman 便一直等待,直至超時,
已寫出的數(shù)據(jù)就是byte字節(jié)數(shù)組,后臺已經(jīng)處理完并且return。
這樣奇怪的問題我還是第一次遇到,
在瀏覽器是這樣,
我還以為是文件有問題,找了半天也不知道是什么原因,
后來發(fā)現(xiàn)了之前別人留下的這一行。。。
response.setHeader(HttpHeaders.CONTENT_LENGTH, String.valueOf(10240));
我***!
這一句在header中設(shè)置了內(nèi)容的大小Content-Length是10240個字節(jié),
是10k,temp.txt文件大小在5k左右,這就導(dǎo)致response以為沒下完,文章來源:http://www.zghlxwxcb.cn/news/detail-797342.html
便一致在等待,當(dāng)然是等不到什么結(jié)果的,
后來把這一行去掉問題解決了。文章來源地址http://www.zghlxwxcb.cn/news/detail-797342.html
到了這里,關(guān)于response的Content-Length設(shè)置錯誤,導(dǎo)致springboot文件下載,代碼已經(jīng)return,postman一直等待到超時的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!