/** * 本地资源通用下载 * * @param fileNames 需要下载的文件 */ public void resourceDownload(String[] fileNames, HttpServletResponse response) throws Exception { try { for (String fileName : fileNames) { if (!FileUtils.checkAllowDownload(fileName)) { throw new Exception(StringUtils.format("资源文件({})非法,不允许下载。 ", fileName)); } // 本地资源路径 // String localPath = RuoYiConfig.getProfile(); // 数据库资源地址 // String downloadPath = StringUtils.substringAfter(fileName, Constants.RESOURCE_PREFIX); // 下载名称 String downloadName = StringUtils.substringAfterLast(fileName, "/"); response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); FileUtils.setAttachmentResponseHeader(response, downloadName); FileUtils.writeBytes(fileName, response.getOutputStream()); } } catch (Exception e) { e.printStackTrace(); } }循环调用这个方法下载 只下载一个文件
时间: 2024-02-10 08:08:23 浏览: 91
在循环中调用 `resourceDownload` 方法下载多个文件时,你需要在每次循环中刷新 HttpServletResponse 对象,否则会出现只下载一个文件的问题。
你可以在每次循环结束后,调用 `response.flushBuffer()` 方法,将响应刷新到客户端。修改后的代码如下:
```java
public void resourceDownload(String[] fileNames, HttpServletResponse response) throws Exception {
try {
for (String fileName : fileNames) {
if (!FileUtils.checkAllowDownload(fileName)) {
throw new Exception(StringUtils.format("资源文件({})非法,不允许下载。 ", fileName));
}
// 本地资源路径
// String localPath = RuoYiConfig.getProfile();
// 数据库资源地址
String downloadPath = StringUtils.substringAfter(fileName, Constants.RESOURCE_PREFIX);
// 下载名称
String downloadName = StringUtils.substringAfterLast(fileName, "/");
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
FileUtils.setAttachmentResponseHeader(response, downloadName);
FileUtils.writeBytes(fileName, response.getOutputStream());
response.flushBuffer(); // 刷新响应
}
} catch (Exception e) {
e.printStackTrace();
}
}
```
希望这个修改能够帮助你解决问题。
阅读全文