Spring MVC 文件下载两种方式
方式1
/**
* 直接下载app文件
* @return
*/
@RequestMapping(value = "/download/appFile", method = {RequestMethod.GET})
public ResponseEntity<byte[]> downloadAppFile() throws Exception {
log.info("获取App最新下载地址");
AppInfoVO appInfoVO = updateInfoService.getAppInfo();
if (Objects.nonNull(appInfoVO)) {
String filename = getFileName(appInfoVO);
HttpHeaders headers = new HttpHeaders();//设置头信息
String downloadFileName = new String(filename.getBytes("UTF-8"), "iso-8859-1");//设置响应的文件名
headers.setContentDispositionFormData("attachment", downloadFileName);
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
// MediaType:互联网媒介类型 contentType:具体请求中的媒体类型信息
return new ResponseEntity<byte[]>(HttpClientUtil.httpGetByteRequest(appInfoVO.getUrl()), headers,
HttpStatus.CREATED);
}
return null;
}
方式2
@RequestMapping(value = "/download/appFile3", method = {RequestMethod.GET})
public void downloadAppFile3(HttpServletResponse response) throws Exception {
log.info("获取App最新下载地址3");
AppInfoVO appInfoVO = updateInfoService.getAppInfo();
if (Objects.nonNull(appInfoVO)) {
String filename = getFileName(appInfoVO);
response.setHeader("content-type", "application/octet-stream");
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition",
"attachment;filename=" + java.net.URLEncoder.encode(filename, "UTF-8"));
// 发送给客户端的数据
try (OutputStream outputStream = response.getOutputStream();
InputStream bis = new ByteArrayInputStream(HttpClientUtil.httpGetByteRequest(appInfoVO.getUrl()));) {
IOUtils.copy(bis, outputStream);
} catch (Exception e) {
e.printStackTrace();
}
}
}
两种方式的比较
相同点:两种方式都可以再浏览器中下载
不同点:方式一在部分手机的浏览器或者迅雷下载工具中,不能下载,但方式二可以。