在项目中使用文件流进行下载,下载后文件乱码,代码如下
@GetMapping("downAssessmentFile")
public ResultUtils<String> downAssessmentFile(String path, HttpServletRequest request, HttpServletResponse response) {
//读取文件
OutputStream outputStream = null;
InputStream inputStream = null;
BufferedInputStream bufferedInputStream = null;
byte[] bytes = new byte[1024];
File file = new File(path);
String fileName = file.getName();
try {
// StandardCharsets.ISO_8859_1 *=UTF-8'
// response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
// 以流的形式返回文件
response.setContentType("application/octet-stream;charset=utf-8");
inputStream = new FileInputStream(file);
bufferedInputStream = new BufferedInputStream(inputStream);
outputStream = response.getOutputStream();
int i = bufferedInputStream.read(bytes);
while (i != -1) {
outputStream.write(bytes, 0, i);
i = bufferedInputStream.read(bytes);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (inputStream != null) {
inputStream.close();
}
if (outputStream != null) {
outputStream.close();
}
if (bufferedInputStream != null) {
bufferedInputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
return ResultUtils.success();
}
}
}
直接传绝对的路径,前端代码如下
const downSingleFile = (item:any) => {
let list = {
path:item
}
downAssessmentFile(list).then(async function (res: any) {
// 处理成功情况
console.log(res)
// let link = document.createElement('a')
// link.href = res.data //url文件地址
// link.download = item.useTitleName //加上下载的文件名
//
// link.click()
// link.remove()
let title = "文件"
//下载文件
var fileURL = window.URL.createObjectURL(new Blob([res]));
console.log(fileURL, 'fileURL')
var fileLink = document.createElement('a');
fileLink.href = fileURL;
fileLink.setAttribute('download',title );
document.body.appendChild(fileLink);
fileLink.click();
}) .catch(function (error) {
// 处理错误情况
console.log(error)
});
}
下载后文件类型不正确,文件内容乱码
打断点如下图
path是有值的,下载后的文件是一个text文件
是哪里有问题,请指教