javaWeb代码从网络中下载文件

it2025-10-17  7

从网络下载文件以流文件的方式给到浏览器

package com.hengqin.life.face.util; import lombok.extern.slf4j.Slf4j; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; /** * 下载工具 * ClassName:DownloadFileUtils * Package:com.hengqin.life.face.util * Description: * * @date:2020/10/2018:11 * @author:liuxiao */ @Slf4j public class DownloadFileUtils { /** * 通过网络路径下载 * * @param path * @param filename * @param request * @param response */ public static void downloadFile(String path, String filename, HttpServletRequest request, HttpServletResponse response) { InputStream inputStream = null; OutputStream out = null; HttpURLConnection conn = null; try { URL url = new URL(path); 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(); out = response.getOutputStream(); response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.replaceAll(" ", "").getBytes("utf-8"), "iso8859-1")); //返回头 文件名 response.setContentType("application/octet-stream"); //设置数据种类 //写文件 int b; while ((b = inputStream.read()) != -1) { out.write(b); } } catch (IOException e) { log.error("网络报错{}",e); } finally { try { inputStream.close(); out.close(); } catch (IOException e) { log.error("关闭报错{}",e); } } } /** * 从输入流中获取字节数组 * * @param inputStream * @return * @throws IOException */ public static byte[] readInputStream(InputStream inputStream) throws IOException { byte[] buffer = new byte[1024]; int len = 0; ByteArrayOutputStream bos = new ByteArrayOutputStream(); while ((len = inputStream.read(buffer)) != -1) { bos.write(buffer, 0, len); } bos.close(); return bos.toByteArray(); } }
最新回复(0)