1

ResponseEntity下载文件

 2 years ago
source link: https://wakzz.cn/2018/12/17/html/ResponseEntity%E4%B8%8B%E8%BD%BD%E6%96%87%E4%BB%B6/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

ResponseEntity下载文件

祈雨的博客
2018-12-17

FileSaver.js

前端angular

import FileSaver from '../xxx/FileSaver.js';

const params = {
};
return this.$http({
method: 'GET',
url: '/download.json',
// responseType必须值,否则文件下载后乱码
responseType: 'arraybuffer',
params: params
}).then(function (response) {
let body = response.data;
let contentDisposition = response.headers('Content-Disposition');
// 获取文件名
let fileName;
for (let key of contentDisposition.split(';')){
let name = key.split('=')[0].trim();
if (name === 'filename'){
fileName = key.split('=')[1].trim();
// 解决中文乱码
fileName = decodeURIComponent(escape(fileName));
// 去除首尾多余双引号
fileName = fileName.replace(/"/g, '');
}
}
if (body) {
let file = new Blob([body], {
type: "application/octet-stream"
});
FileSaver.saveAs(file, fileName);
} else {
// 下载失败
}
}).catch(error => {
this.$log.log(error);
});
@GetMapping("/download.json")
public ResponseEntity<byte[]> download() {
byte[] bytes;
HttpHeaders headers = new HttpHeaders();
String filename = new String(new String("file.xlsx").getBytes("utf-8"), "iso-8859-1");
headers.setContentDispositionFormData("attachment", filename);
headers.setContentLength(bytes.length);
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
return new ResponseEntity<byte[]>(bytes, headers, HttpStatus.OK);
}

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK