private static void downLoadExcel( String fileName, HttpServletResponse response,
Workbook workbook) {
try {
response.setCharacterEncoding(“UTF-8”);
response.setHeader(“content-Type”, “multipart/form-data”);
response.setHeader(“Content-Disposition”,
“attachment;filename=” + URLEncoder.encode(fileName, “UTF-8”));
workbook.write(response.getOutputStream());
} catch (IOException e) {
throw new RuntimeException(e);
}
}
方法二:
@ApiOperation(value = "计算接口对应的下载")
@GetMapping("downloadcalculate")
public ResponseCode<String> downloadcalculate(@RequestParam String name, HttpServletResponse response){
//HVAC分体空调与设备清单EDS2011-新风处理空调(c8de6658-acf6-452c-9e5a-363f04eb8c64).xlsx
// String filePath =System.getProperty("user.dir")+"\\File\\FileTemplate\\HVAC分体空调与设备清单EDS2011-新风处理空调("+uuid +").xlsx";
String filePath =System.getProperty("user.dir")+"\\File\\FileTemplate\\"+name;
File file=new File(filePath);
String fn = name;
FileInputStream fis = null;
OutputStream os = null;
try {
fis = new FileInputStream(file);
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
response.reset();
response.setCharacterEncoding("utf-8");
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(name,"utf-8"));
response.addHeader("Content-Length", "" + file.length());
os = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
os.write(buffer);
} catch (Exception e) {
e.printStackTrace();
return ResponseCode.error(e.getMessage());
}
return ResponseCode.sucess();
}
法三:
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
@CrossOrigin
@ApiOperation(value = “计算接口对应的下载”)
@GetMapping(“downloadcalculate”)
public ResponseEntity downloadcalculate(String name) throws IOException {
FileSystemResource file = new FileSystemResource(System.getProperty("user.dir")+"\\File\\FileTemplate\\"+name);
HttpHeaders headers = new HttpHeaders();
headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
headers.add("Content-Disposition", String.format("attachment; filename=\"%s\"", file.getFilename()));
headers.add("Pragma", "no-cache");
headers.add("Expires", "0");
return ResponseEntity
.ok()
.headers(headers)
.contentLength(file.contentLength())
.contentType(MediaType.parseMediaType("application/octet-stream"))
.body(new InputStreamResource(file.getInputStream()));
}
标题前端接收:
方式一(GET)
window.open(process.env.VUE_APP_FILE_API + ‘/masterComputingModule/Update/downLoadcalculateResult?projectId=’ + id, ‘_self’)
方式二(post)
axios({
method: ‘get’,
url: process.env.VUE_APP_FILE_API + ‘/masterComputingModule/Update/downLoadcalculateResult?projectId=’ + id,
responseType: ‘arraybuffer’
}).then(res => {
const name = res.headers[‘content-disposition’]
console.log(name.split(“attachment;filename*=utf-8’”)[1])
if (res.size === 0) { // 如果返回是空的
this.$message({
message: ‘报错了’,
type: ‘warning’
})
} else { // 返回不为空
if (!!window.ActiveXObject || ‘ActiveXObject’ in window) {
window.navigator.msSaveOrOpenBlob(res, ‘计算结果.xlsx’)
} else {
const url = window.URL.createObjectURL(
new Blob([res.data], {
type: 'application/octet-stream'
})
)
const link = document.createElement('a')
link.href = url
link.setAttribute(
'download', decodeURI(name.split("attachment;filename*=utf-8''")[1], 'utf-8')
)
link.click()
}
}
})
此处对应的前台部分重要代码:(不这样写前台拿不到响应头中的文件名),如果出现跨域问题给接口方法加个@CrossOrigin
response.setHeader("Access-Control-Expose-Headers", "Content-disposition");
response.setHeader("Content-disposition","attachment;filename*=utf-8''"+fileName);