/**
* 下载文件控制器
* @param path url地址
* @param response 响应体
*/
@ApiOperation(value = "下载文件", notes = "下载文件")
@ApiImplicitParam(name = "path", value = "url地址", required = true)
@GetMapping(value = "/downloadFile")
@ResponseBody
public void downloadFile(@RequestParam String path, HttpServletResponse response) {
try {
try (InputStream fis = FileUtils.getInputStreamFromUrl(path)) {
// 清空response
response.reset();
// 设置response的Header
response.addHeader("Content-Disposition", "attachment;filename=" + SnowflakeIdWorker.nextId().toString());
OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
outputStream.write(IOUtils.toByteArray(fis));
outputStream.flush();
outputStream.close();
}
} catch (Exception e) {
log.error("下载出错-》:{}",e.getMessage());
}
}
/**
* 根据url下载文件流
* @param urlStr
* @return
*/
public static InputStream getInputStreamFromUrl(String urlStr) {
InputStream inputStream=null;
try {
//url解码
URL url = new URL(java.net.URLDecoder.decode(urlStr, "UTF-8"));
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//设置超时间为3秒
conn.setConnectTimeout(3 * 1000);
//防止屏蔽程序抓取而返回403错误
conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
//得到输入流
inputStream = conn.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
return inputStream;
}
java 通过路径下载文件
最新推荐文章于 2024-04-27 23:13:56 发布