vue中blob流文件下载格式jdk格式错误
时间: 2023-08-03 14:08:58 浏览: 127
如果在 Vue 中下载的 Blob 流文件的格式不正确,可能是因为响应头中的 Content-Type 属性不正确。例如,如果下载的是一个 JAR 文件,但响应头中的 Content-Type 是 `application/octet-stream`,浏览器就会将其识别成二进制文件,而不是 JAR 文件。
解决该问题的方法是,手动设置响应头中的 Content-Type 属性。在后端代码中,可以通过设置响应头中的 Content-Type 属性为 `"application/java-archive"`,来告诉浏览器下载的是一个 JAR 文件。例如,在 Java Spring Boot 中可以使用如下代码:
```java
@GetMapping("/download")
public ResponseEntity<byte[]> download() {
byte[] content = // 获取文件数据
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", "file.jar");
return new ResponseEntity<>(content, headers, HttpStatus.OK);
}
```
在上面的代码中,我们通过 `HttpHeaders` 对象设置了响应头中的 Content-Type 属性为 `"application/java-archive"`,并使用 `setContentDispositionFormData` 方法设置了文件名为 `"file.jar"`。
在前端代码中,可以直接使用之前提到的方法下载该文件:
```javascript
axios({
url: 'your-api-url',
method: 'get',
responseType: 'blob' // 表示返回类型为 Blob
}).then(res => {
const content = res.data;
const blob = new Blob([content], { type: 'application/java-archive' });
const fileName = 'file.jar'; // 文件名
const link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = fileName; // 下载文件名
link.click();
window.URL.revokeObjectURL(link.href);
});
```
在上面的代码中,我们手动设置了 Blob 对象的类型为 `"application/java-archive"`,以确保浏览器正确识别该文件的格式。
阅读全文