/**
* 单个文件下载
*/
@RequiresPermissions("system:appraising:detail")
@GetMapping("/downloadOneFile/{fileId}")
public void fileDownload(@PathVariable("fileId") Long fileId,HttpServletResponse response, HttpServletRequest request) throws Exception {
UserAttachVo userAttachVo;
if(null != fileId) {
userAttachVo = iUserAttachService.findUserAttachByFileId(fileId);
// 文件的名称
String downloadFilename = userAttachVo.getFileName();
BufferedOutputStream os = new BufferedOutputStream(response.getOutputStream());
try {
// 转换中文否则可能会产生乱码
downloadFilename = URLEncoder.encode(downloadFilename, "UTF-8");
// 指明response的返回对象类型
response.setHeader("Content-type", userAttachVo.getFileType());
// 设置在下载框默认显示的文件名
response.setHeader("Content-Disposition","attachment;filename=" + downloadFilename);
// 去服务器上下载文件并下载
HttpURLConnection conn = (HttpURLConnection) new URL(userAttachVo.getFilePath()).openConnection();
conn.setReadTimeout(6000);
conn.setConnectTimeout(6000);
conn.setRequestMethod("GET");
BufferedInputStream fis = null;
if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
fis = new BufferedInputStream(conn.getInputStream());
}
byte[] buffer = new byte[1024];
int r = 0;
if(null != fis) {
while ((r = fis.read(buffer)) != -1) {
os.write(buffer, 0, r);
os.flush();
}
fis.close();
}
} catch (Exception e) {
log.error("下载文件失败", e);
} finally {
os.flush();
os.close();
}
}
}
/**
* 文件打成压缩包下载
*/
@RequiresPermissions("system:appraising:detail")
@GetMapping("/downloadFile")
public void downloadFile(String appraisingId, String appraisingName, String userName, HttpServletResponse response, HttpServletRequest request) throws Exception {
List<UserAttachVo> userAttachVos;
if(null != appraisingId) {
ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());
try {
userAttachVos = iUserAttachService.findUserAttachByAppraisingId(Long.valueOf(appraisingId));
// 文件的名称
String downloadFilename = appraisingName + userName + ".zip";
// 转换中文否则可能会产生乱码
downloadFilename = URLEncoder.encode(downloadFilename, "UTF-8");
// 指明response的返回对象是文件流
response.setContentType("application/octet-stream");
// 设置在下载框默认显示的文件名
response.setHeader("Content-Disposition","attachment;filename=" + downloadFilename);
// 将文件打成压缩包并下载
for(UserAttachVo userAttach : userAttachVos) {
String url = userAttach.getFilePath();
zos.putNextEntry(new ZipEntry(userAttach.getFileName()));
HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
conn.setReadTimeout(5000);
conn.setConnectTimeout(5000);
conn.setRequestMethod("GET");
BufferedInputStream fis = null;
if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
fis = new BufferedInputStream(conn.getInputStream());
}
byte[] buffer = new byte[1024];
int r = 0;
if (null != fis) {
while ((r = fis.read(buffer)) != -1) {
zos.write(buffer, 0, r);
}
fis.close();
}
}
} catch (Exception e) {
log.error("下载文件失败", e);
} finally {
zos.flush();
zos.close();
}
}
}
网友评论