前端vue请求后端java接口,传入文件路径,下载文件

js:

responseType: 'blob'解决下载zip文件无法打开的问题

export function downloadFile(query) {
    return request({
        url: '/ai/downloadFile',
        method: 'GET',
        params: query,
        responseType: 'blob',
        headers: {
            'Content-Type': 'application/json; application/octet-stream'
        }
    })
}

vue:

handleDownload(filePath) {
	downloadFile({ filePath: filePath }).then((blob) => {
		const url = window.URL.createObjectURL(new Blob([blob]));
		const link = document.createElement("a");
		link.href = url;
		// 设置下载文件的文件名
		link.setAttribute("download", filePath.split("/").pop());
		document.body.appendChild(link);
		link.click();
		// 下载完成后移除链接
		link.parentNode.removeChild(link);
	});
},

java:

/**
 * 下载文件
 *
 * @param filePath 文件路径 /开头
 * @return 结果
 * @throws IOException
 */
@GetMapping("/downloadFile")
public ResponseEntity<InputStreamResource> downloadFile(String filePath) throws IOException {
	File file = new File(filePath);
	if (!file.exists()) {
		// 如果文件不存在,返回404
		return ResponseEntity.notFound().build();
	}
	FileInputStream fis = new FileInputStream(file);
	InputStreamResource resource = new InputStreamResource(fis);
	return ResponseEntity.ok()
			.header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + file.getName())
			.contentType(MediaType.APPLICATION_OCTET_STREAM)
			.contentLength(file.length())
			.body(resource);
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值