通过网络路径获取文件byte,转入服务器临时文件中,最后保存进压缩包提供给用户下载
批量下载--压缩文件
String[] nameAll = name.split(",");//接收打包数组 /** * 定义压缩包 */ String downloadFilename = "压缩包名称.zip"; downloadFilename = URLEncoder.encode(downloadFilename, "UTF-8"); response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename=" + downloadFilename); ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());//压缩包输出流 /** * 根据数量生成系统临时文件 */ File[] files =new File[nameAll.length]; for(int i=0;i<nameAll.length;i++){ files[i]= File.createTempFile(nameAll[i].toString(), ".jpg"); files[i].deleteOnExit(); }
/** * 得到文件--处理放入零时文件 */ for(int i=0;i<nameAll.length;i++){ byte[] buffer = getImageFromNetByUrl(nameAll[i]); OutputStream output = new FileOutputStream(files[i]); BufferedOutputStream bufferedOutput = new BufferedOutputStream(output); bufferedOutput.write(buffer); bufferedOutput.flush(); bufferedOutput.close(); output.flush(); output.close(); }
/** * 命名--放入压缩包中 */ for (int i=0;i<files.length;i++) { zos.putNextEntry(new ZipEntry(i+".jpg")); FileInputStream fis = new FileInputStream(files[i]); byte[] buffer = new byte[1024]; int r = 0; while ((r = fis.read(buffer)) != -1) { zos.write(buffer, 0, r); } fis.close(); } zos.flush(); zos.close();
/** * 根据网络地址获得数据的字节流 * @param urlStr 网络连接地址 * @return */ public static byte[] getImageFromNetByUrl(String urlStr){ try { URL url = new URL(urlStr); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(3 * 1000); InputStream is = conn.getInputStream();//通过输入流获取图片数据 byte[] bt = readInputStream(is);//得到图片的二进制数据 return bt; } catch (Exception e) { e.printStackTrace(); } return null; } /** * 从输入流中获取数据 * @param inStream 输入流 * @return * @throws Exception */ public static byte[] readInputStream(InputStream inStream) throws Exception{ ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while( (len=inStream.read(buffer)) != -1 ){ outStream.write(buffer, 0, len); } inStream.close(); return outStream.toByteArray(); }