当前位置: 首页 > 编程笔记 >

java实现从网络下载多个文件

宋明亮
2023-03-14
本文向大家介绍java实现从网络下载多个文件,包括了java实现从网络下载多个文件的使用技巧和注意事项,需要的朋友参考一下

java从网络下载多个文件,供大家参考,具体内容如下

首先是打包下载多文件,即打成压缩包在下载。

其次 别处的资源:可以是别的服务器,可以是网上的资源,当然也可以是本地的(更简单)

最后:一次性下载,一次性下载多个文件

三步走:

一、先将 “别处” 需要下载的文件下载到服务器,然后将文件的路径改掉

二、然后将服务器上的文件打成压缩包

三、下载这个压缩包

//下载
 @RequestMapping("/download01")
 public void downloadImage(String tcLwIds, HttpServletRequest request, HttpServletResponse response) throws Exception{
 boolean dflag = false;
 String[] paths = tcLwIds.split(",");
 File [] file1 = new File[paths.length];
 DownLoadImageUtil imageUtils = new DownLoadImageUtil(); 
 if(paths.length > 1){
 for (int i = 0; i < paths.length; i++) {
 String imagepath=paths[i];
 imageUtils.makeImage(imagepath); //将url的图片下载到本地,这个方法在下边
 //修改为图片存放路径
 file1[i] = new File("D:/upload/"+imagepath.substring(imagepath.lastIndexOf("/")));
 }
 filesDown(request, response, file1);//这是下边的一个方法
 }
 }
 
 //将下载到 服务器 的图片 放入压缩包
 public void filesDown(HttpServletRequest request,HttpServletResponse response,File[] file1 ) throws Exception {
 Random r=new Random();
 String tmpFileName =r.nextInt(10000) +"downImage.zip"; 
 String upath=request.getRealPath("/");
 upath=upath.substring(0,upath.length()-1);
 upath=upath.substring(0,upath.lastIndexOf("\\"));
 //服务地址的存放路径
 String FilePath = upath+"/ROOT/data/";
 File f=new File(FilePath);
 if(!f.exists()){ //路径不存在就创建
 FileUtil.createDir(FilePath);
 }
 
  byte[] buffer = new byte[1024]; 
  String strZipPath = FilePath + tmpFileName; //路径加文件名
  try { 
   ZipOutputStream out = new ZipOutputStream(new FileOutputStream(strZipPath)); 
   for (int i = 0; i < file1.length; i++) { 
    FileInputStream fis = new FileInputStream(file1[i]); 
    out.putNextEntry(new ZipEntry(file1[i].getName())); 
    //设置压缩文件内的字符编码,不然会变成乱码 
    out.setEncoding("GBK"); 
    
    int len; 
    // 读入需要下载的文件的内容,打包到zip文件 
    while ((len = fis.read(buffer)) > 0) { 
     out.write(buffer, 0, len); 
    } 
    out.closeEntry(); 
    fis.close();
   } 
   out.close(); 
   //下载的服务地址根据实际情况修改
   boolean dflag = downloafile(request, response,"http://localhost:8080/data/"+tmpFileName);
   //将服务器上 压缩前的源文件 删除
   for (int i = 0; i < file1.length; i++) { 
 if (file1[i].isFile()) {
  file1[i].delete();
 }
   }
   //将服务器上的压缩包删除
   File fileZip=new File(strZipPath);
   fileZip.delete();
  } catch (Exception e) { 
  e.printStackTrace();
  } 
 } 
 
 //写到本地
 public boolean downloafile(HttpServletRequest request,HttpServletResponse response, String path) {
 String name = path.substring(path.lastIndexOf("/")+1);
 String filename = DownLoadImageUtil.encodeChineseDownloadFileName(request, name);
 response.setHeader("Content-Disposition", "attachment; filename=" + filename + ";");
 boolean flag = false;
 try {
 URL url = new URL(path);
   InputStream inStream = url.openConnection().getInputStream();
 BufferedInputStream in = new BufferedInputStream(inStream);
 ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
 byte[] temp = new byte[1024];
 int size = 0;
 while ((size = in.read(temp)) != -1) {
 out.write(temp, 0, size);
 }
 in.close();
 ServletOutputStream os = response.getOutputStream();
 os.write(out.toByteArray());
 os.flush();
 os.close();
 flag = true;
 } catch (Exception e) {
 logger.error("违法信息下载...出错了");
 }
 return flag;
 }

makeImage(); 方法(如果是服务器上的图片,可以省略这一步,直接打包)

/** 
  * 下载图片,并按照指定的路径存储 
  * @param bean 
  * @param filePath 
  */ 
 public void makeImage( String filePath) { 
  // 网络请求所需变量 
  try { 
   //new一个URL对象 
   URL url = new URL(filePath); 
   //打开链接 
   HttpURLConnection conn = (HttpURLConnection)url.openConnection(); 
   //设置请求方式为"GET" 
   conn.setRequestMethod("GET"); 
   //超时响应时间为5秒 
   conn.setConnectTimeout(5 * 1000); 
   //通过输入流获取图片数据 
   InputStream inStream = conn.getInputStream(); 
   
   ByteArrayOutputStream outStream = new ByteArrayOutputStream(); 
   //创建一个Buffer字符串 
   byte[] buffer = new byte[1024]; 
   //每次读取的字符串长度,如果为-1,代表全部读取完毕 
   int len = 0; 
   //使用一个输入流从buffer里把数据读取出来 
   while( (len=inStream.read(buffer)) != -1 ){ 
    //用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度 
    outStream.write(buffer, 0, len); 
   } 
   byte []data=outStream.toByteArray();
   //先将图片从url下载到服务器的D:/upload/
   File imageFile = new File("D:/upload/"+filePath.substring(filePath.lastIndexOf("/"))); 
   //创建输出流 
   FileOutputStream foutStream = new FileOutputStream(imageFile); 
   foutStream.write(data); 
   //关闭输出流 
   foutStream.close();
   inStream.close();
   
  } catch (MalformedURLException e) { 
   e.printStackTrace(); 
  } catch (IOException e) { 
   e.printStackTrace(); 
  } 
 } 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍Android实现网络多线程文件下载,包括了Android实现网络多线程文件下载的使用技巧和注意事项,需要的朋友参考一下 实现原理 (1)首先获得下载文件的长度,然后设置本地文件的长度。 (2)根据文件长度和线程数计算每条线程下载的数据长度和下载位置。 如:文件的长度为6M,线程数为3,那么,每条线程下载的数据长度为2M,每条线程开始下载的位置如下图所示: (网上找的图) 例如10M

  • 本文向大家介绍java多线程实现文件下载,包括了java多线程实现文件下载的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java多线程实现文件下载的具体代码,供大家参考,具体内容如下 1、DownloadManager类  2、DownloadThread类 3、TestDownload测试类 代码已经测试可以运行! 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多

  • 问题内容: 我有以下网址: 我尝试下载文件: 这产生了一个名为“ test.xls”的文件,但这显然是一个html文件。如果我在firefox中打开了html文件,则打开了一个excel文件,但是如果我在excel中打开了文件,那绝对不是我要找的excel文件。 如果我有一个与上述地址相同的网址,如何使python将excel文件下载为excel文件? 问题答案: 这会将excel文件保存在运行脚

  • 本文向大家介绍iOS开发网络篇—实现大文件的多线程断点下载,包括了iOS开发网络篇—实现大文件的多线程断点下载的使用技巧和注意事项,需要的朋友参考一下 说明:本文介绍多线程断点下载。项目中使用了苹果自带的类,实现了同时开启多条线程下载一个较大的文件。因为实现过程较为复杂,所以下面贴出完整的代码。 实现思路:下载开始,创建一个和要下载的文件大小相同的文件(如果要下载的文件为100M,那么就在沙盒中创

  • 本文向大家介绍java多线程实现文件下载功能,包括了java多线程实现文件下载功能的使用技巧和注意事项,需要的朋友参考一下 多线程下载文件的思路: 1.首先获取到文件的总大小 获取文件大小的方式是通过网络读取,getContentLength()即可获取到文件的大小,使用RandomAccessFile()支持随机访问 2.根据所准备的线程数据,计算每一个线程需要下载的文件的大小 上图显示下载40

  • 本文向大家介绍python实现从网络下载文件并获得文件大小及类型的方法,包括了python实现从网络下载文件并获得文件大小及类型的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python实现从网络下载文件并获得文件大小及类型的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的Python程序设计有所帮助。