java下载文件工具类
package com.skjd.util; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import javax.servlet.http.HttpServletResponse;public class DownloadUtils { /** * 根据网络url下载文件 * 下载到指定文件 * @throws MalformedURLException */ public static void DownloadByUrlToFile(String urlPath,String filename2) throws Exception{ URL url = new URL(urlPath);/* //文件后缀名 String str = url.getFile().substring( url.getFile().lastIndexOf(".")+1); //文件名 String filename = url.getFile().substring(url.getFile().lastIndexOf("/")+1,url.getFile().lastIndexOf("."));*/ HttpURLConnection conn = (HttpURLConnection)url.openConnection(); int code = conn.getResponseCode(); if (code != HttpURLConnection.HTTP_OK) { throw new Exception("文件读取失败"); } InputStream fis = new BufferedInputStream(conn.getInputStream()); File file = new File(filename2); OutputStream toClient = new BufferedOutputStream(new FileOutputStream(file)); // 以流的形式下载文件。 byte[] buffer = new byte[1024*8]; int read=0; //如果没有数据了会返回-1;如果还有会返回数据的长度 while ((read = fis.read(buffer))!=-1) { //读取多少输出多少 toClient.write(buffer,0,read); } toClient.flush(); toClient.close(); fis.close(); } /** * 根据网络url下载文件 * 直接返回给浏览器 * @throws MalformedURLException */ public static void DownloadByUrl(String urlPath,HttpServletResponse response) throws Exception{ URL url = new URL(urlPath); //文件后缀名 String str = url.getFile().substring( url.getFile().lastIndexOf(".")+1); //文件名 String filename = url.getFile().substring(url.getFile().lastIndexOf("/")+1,url.getFile().lastIndexOf(".")); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); int code = conn.getResponseCode(); if (code != HttpURLConnection.HTTP_OK) { throw new Exception("文件读取失败"); } InputStream fis = new BufferedInputStream(conn.getInputStream()); OutputStream toClient = new BufferedOutputStream(response.getOutputStream()); // 设置response的Header response.addHeader("Content-Disposition", "attachment;filename=" +filename+"."+str); response.setContentType("application/octet-stream"); // 以流的形式下载文件。 byte[] buffer = new byte[1024*8]; int read=0; //如果没有数据了会返回-1;如果还有会返回数据的长度 while ((read = fis.read(buffer))!=-1) { //读取多少输出多少 toClient.write(buffer,0,read); } toClient.flush(); toClient.close(); fis.close(); } }
使用案例代码
/** * 导出购票码 */ @RequestMapping(value="/getAllCode") public void getAllCode(HttpServletResponse response){ PageData pd = new PageData(); pd = this.getPageData(); try { Listlist = driverService.listAll(pd); //获取当前项目的绝对路径 String realPath = this.getRequest().getSession().getServletContext().getRealPath("/"); File file = new File(realPath+"/codes/"); //判断是否存在这个文件夹,如果不存在则重新创建一个文件 if(!file.exists()){ file.mkdirs(); } String url2=""; Listlist3 = dictionariesService.getIMGUrl(null); for(int i=0;i<list3.size();i++){ if(String.valueOf(list3.get(i).get("remarks")).length()>6){ url2=String.valueOf(list3.get(i).get("remarks")); } } for(int i=0;i<list.size();i++){ if(list.get(i).get("code_url")!=null&&!"".equals(String.valueOf(list.get(i).get("code_url")))){ DownloadUtils.DownloadByUrlToFile(url2+String.valueOf(list.get(i).get("code_url")),realPath+"/codes/"+String.valueOf(list.get(i).get("idcode"))+".png"); } } FileZip.zip(realPath+"/codes/", realPath+"/codes.zip"); InputStream fis = new BufferedInputStream(new FileInputStream(new File(realPath+"/codes.zip"))); OutputStream toClient = new BufferedOutputStream(response.getOutputStream()); Cookie cookie = new Cookie("abcd", "123"); cookie.setPath("/"); response.addCookie(cookie); // 设置response的Header response.setContentType("application/zip");// 指明response的返回对象是文件流 response.setHeader("content-Disposition", "attachment;filename=codes.zip");// 设置在下载框默认显示的文件名 // 以流的形式下载文件。 byte[] buffer = new byte[1024*8]; int read=0; //如果没有数据了会返回-1;如果还有会返回数据的长度 while ((read = fis.read(buffer))!=-1) { //读取多少输出多少 toClient.write(buffer,0,read); } toClient.flush(); toClient.close(); fis.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }
public static void downLoadFile(HttpServletResponse response, String filePath) throws IOException { File file = new File(filePath); downLoadFile(response,file); } public static void downLoadFile(HttpServletResponse response,File file) throws IOException { if (file.exists()) { response.setContentType("application/force-download"); response.setHeader("Content-Disposition", "attachment;filename=" + file.getName()); byte[] buffer = new byte[1024]; try (FileInputStream fis = new FileInputStream(file); BufferedInputStream bis = new BufferedInputStream(fis)) { OutputStream os = response.getOutputStream(); int i = bis.read(buffer); while (i != -1) { os.write(buffer, 0, i); i = bis.read(buffer); } fis.close(); os.close(); } } } public static void downLoadFile(HttpServletResponse response,InputStream fis,String fileName) throws IOException { response.setContentType("application/force-download"); response.setHeader("Content-Disposition", "attachment;filename=" + fileName); byte[] buffer = new byte[1024]; try ( BufferedInputStream bis = new BufferedInputStream(fis)) { OutputStream os = response.getOutputStream(); int i = bis.read(buffer); while (i != -1) { os.write(buffer, 0, i); i = bis.read(buffer); } } fis.close(); }