springboot 下载文件 未知大小
时间: 2023-10-13 18:28:51 浏览: 93
在 Spring Boot 中,可以使用 `RestTemplate` 来下载文件。以下是一个示例代码:
```java
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<byte[]> response = restTemplate.exchange(fileUrl, HttpMethod.GET, null, byte[].class);
byte[] fileData = response.getBody();
// 保存文件到本地
FileOutputStream fos = new FileOutputStream("/path/to/save/file");
fos.write(fileData);
fos.close();
```
上述代码中,`fileUrl` 是文件的 URL 地址,`RestTemplate.exchange` 方法会发送 GET 请求并获取文件的二进制数据,存储在 `byte[]` 类型的变量 `fileData` 中。最后,将 `fileData` 写入到本地文件即可。
值得注意的是,如果文件较大,这种方式可能会导致内存溢出。为了避免这种情况,可以使用 `ResponseExtractor` 来在读取文件时逐步将数据写入本地文件。以下是一个示例代码:
```java
RestTemplate restTemplate = new RestTemplate();
restTemplate.execute(fileUrl, HttpMethod.GET, null, response -> {
try (BufferedInputStream in = new BufferedInputStream(response.getBody());
FileOutputStream out = new FileOutputStream("/path/to/save/file")) {
byte[] buffer = new byte[1024];
int bytesRead = -1;
while ((bytesRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
return null;
}
});
```
上述代码中,`ResponseExtractor` 的实现会在读取文件时逐步将数据写入本地文件,而不会将整个文件存储在内存中。
阅读全文