通过网络路径获取文件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();
}
通过网络路径获取文件byte,转入服务器临时文件中,最后保存进压缩包提供给用户下载