springboot下载文件跨域
时间: 2023-09-26 19:13:19 浏览: 300
springboot 跨域请求
5星 · 资源好评率100%
在Spring Boot中实现文件下载涉及到两个方面:服务器端配置和前端跨域请求处理。下面是实现文件下载跨域的一种方式:
1. 服务器端配置:
在Spring Boot中,可以使用`@CrossOrigin`注解来处理跨域请求。在你的Controller方法上添加该注解,示例如下:
```java
@RestController
public class FileController {
@CrossOrigin(origins = "http://example.com")
@GetMapping("/download")
public ResponseEntity<InputStreamResource> downloadFile() throws IOException {
// 下载文件的逻辑
// ...
// 返回文件的InputStreamResource
InputStreamResource resource = new InputStreamResource(inputStream);
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Disposition", "attachment; filename=file.txt");
return ResponseEntity.ok()
.headers(headers)
.contentLength(file.length())
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.body(resource);
}
}
```
在`@CrossOrigin`注解中,`origins`参数指定了允许跨域访问的域名。你可以根据需要进行配置,也可以使用通配符`*`来允许所有域名跨域访问。
2. 前端跨域请求处理:
在前端代码中,需要确保发送下载文件请求时,设置正确的请求头和配置`withCredentials`为`true`以支持跨域请求。示例如下:
```javascript
function downloadFile() {
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://yourserver.com/download', true);
xhr.withCredentials = true; // 允许发送跨域请求时携带cookie
xhr.setRequestHeader('Access-Control-Allow-Origin', 'http://example.com'); // 设置请求头,与服务器端配置的允许跨域域名一致
xhr.responseType = 'blob'; // 响应类型为二进制数据流
xhr.onload = function() {
if (xhr.status === 200) {
var blob = new Blob([xhr.response]);
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = 'file.txt';
link.click();
}
};
xhr.send();
}
```
在上述代码中,`xhr.withCredentials`设置为`true`会允许浏览器在跨域请求时携带cookie信息。`xhr.setRequestHeader`方法用于设置请求头,其中的域名需要与服务器端配置的一致。最后,将文件流转为Blob对象,并通过动态创建a标签的方式实现文件下载。
请注意,以上代码仅作为示例,具体实现方式可能会根据你的需求和环境稍有不同。
阅读全文