springboot批量下载照片
时间: 2023-08-15 10:10:01 浏览: 217
您可以使用Spring Boot编写一个批量下载照片的功能。以下是一个简单的示例代码:
1. 首先,您需要创建一个Controller类来处理下载请求:
```java
@RestController
@RequestMapping("/photos")
public class PhotoController {
@GetMapping("/download")
public void downloadPhotos(HttpServletResponse response) throws IOException {
// 设置响应头信息,指定为zip文件类型
response.setContentType("application/zip");
response.setHeader("Content-Disposition", "attachment; filename=\"photos.zip\"");
// 创建一个输出流,将文件写入到zip文件中
try (ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream())) {
// 获取照片列表,这里假设您已经有了一个照片列表的数据源
List<String> photoUrls = getPhotoUrls();
// 遍历照片列表,逐个将照片写入到zip文件中
for (String photoUrl : photoUrls) {
// 获取照片文件名
String fileName = photoUrl.substring(photoUrl.lastIndexOf("/") + 1);
// 创建一个URL对象,用于下载照片
URL url = new URL(photoUrl);
// 打开URL连接,并获取输入流
try (InputStream inputStream = url.openStream()) {
// 将输入流写入到zip文件中
zipOut.putNextEntry(new ZipEntry(fileName));
byte[] buffer = new byte[1024];
int len;
while ((len = inputStream.read(buffer)) > 0) {
zipOut.write(buffer, 0, len);
}
zipOut.closeEntry();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
private List<String> getPhotoUrls() {
// 返回您的照片URL列表的方法,您可以从数据库或其他数据源获取照片URL列表
List<String> photoUrls = new ArrayList<>();
photoUrls.add("https://example.com/photo1.jpg");
photoUrls.add("https://example.com/photo2.jpg");
photoUrls.add("https://example.com/photo3.jpg");
return photoUrls;
}
}
```
2. 在您的Spring Boot应用程序的配置类中,添加以下配置以允许跨域访问:
```java
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedMethods("*")
.allowedOrigins("*")
.allowedHeaders("*");
}
}
```
3. 运行您的Spring Boot应用程序,并访问`http://localhost:8080/photos/download`,即可下载包含照片的zip文件。
请注意,上述代码仅供参考,您需要根据实际需求进行适当的修改和优化。例如,您可能需要更好地处理异常、验证请求、改进文件下载方式等。
阅读全文