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();
  }
 } 

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

(0)

相关推荐

  • Java下载文件时文件名乱码问题解决办法

    复制代码 代码如下: public static String toUtf8String(String s) { StringBuffer sb = new StringBuffer();              for (int i = 0; i < s.length(); i++) {                  char c = s.charAt(i);                  if (c >= 0 && c <= 255) {          

  • JAVA技术实现上传下载文件到FTP服务器(完整)

    具体详细介绍请看下文: 在使用文件进行交互数据的应用来说,使用FTP服务器是一个很好的选择.本文使用Apache Jakarta Commons Net(commons-net-3.3.jar) 基于FileZilla Server服务器实现FTP服务器上文件的上传/下载/删除等操作. 关于FileZilla Server服务器的详细搭建配置过程,详情请见 FileZilla Server安装配置教程 .之前有朋友说,上传大文件(几百M以上的文件)到FTP服务器时会重现无法重命名的问题,但本人亲

  • Javaweb实现上传下载文件的多种方法

    在Javaweb中,上传下载是经常用到的功能,对于文件上传,浏览器在上传的过程中是以流的过程将文件传给服务器,一般都是使用commons-fileupload这个包实现上传功能,因为commons-fileupload依赖于commons-io这个包,所以需要下载这两个包commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar. 1.搭建环境 创建Web项目,将包导入到项目lib下 2.实现文件上传 (第一种上传的方法) 新建upload.jsp页面 <

  • java后台批量下载文件并压缩成zip下载的方法

    本文实例为大家分享了java后台批量下载文件并压缩成zip下载的具体代码,供大家参考,具体内容如下 因项目需要,将服务器上的图片文件压缩打包zip,下载到本地桌面. 首先,前端js: function doQueryPic() { var picsDate = $("#picsDate").val(); var piceDate = $("#piceDate").val(); var picInst = $("#pic_inst").combot

  • java操作ftp下载文件示例

    复制代码 代码如下: /**     *      * JAVA操作 FTP 下载     * 文件下载.     *     */    private void ftpDownload()    {        FTPClient ftpClient = null;        InputStream input = null;        boolean loginFlag = false;        List<String> list = new ArrayList<S

  • Java Spring MVC 上传下载文件配置及controller方法详解

    下载: 1.在spring-mvc中配置(用于100M以下的文件下载) <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <!--配置下载返回类型--> <bean class="or

  • Java通过FTP服务器上传下载文件的方法

    对于使用文件进行交换数据的应用来说,使用FTP 服务器是一个很不错的解决方案. 关于FileZilla Server服务器的详细搭建配置过程,详情请见FileZilla Server安装配置教程.之前有朋友说,上传大文件(几百M以上的文件)到FTP服务器时会重现无法重命名的问题,但本人亲测上传2G的文件到FileZilla Server都没有该问题,朋友们可以放心使用该代码. FavFTPUtil.Java package com.favccxx.favsoft.util; import jav

  • 使用java实现http多线程断点下载文件(一)

    基本原理:利用URLConnection获取要下载文件的长度.头部等相关信息,并设置响应的头部信息.并且通过URLConnection获取输入流,将文件分成指定的块,每一块单独开辟一个线程完成数据的读取.写入.通过输入流读取下载文件的信息,然后将读取的信息用RandomAccessFile随机写入到本地文件中.同时,每个线程写入的数据都文件指针也就是写入数据的长度,需要保存在一个临时文件中.这样当本次下载没有完成的时候,下次下载的时候就从这个文件中读取上一次下载的文件长度,然后继续接着上一次的位

  • JAVA通过HttpURLConnection 上传和下载文件的方法

    本文介绍了JAVA通过HttpURLConnection 上传和下载文件的方法,分享给大家,具体如下: HttpURLConnection文件上传 HttpURLConnection采用模拟浏览器上传的数据格式,上传给服务器 上传代码如下: package com.util; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.DataOutputStream; import java

  • java 从服务器下载文件并保存到本地的示例

    昨天在做一个项目时,用到了从服务器上下载文件并保存到本地的知识,以前也没有接触过,昨天搞了一天,这个小功能实现了,下面就简单的说一下实现过程: 1.基础知识 当我们想要下载网站上的某个资源时,我们会获取一个url,它是服务器定位资源的一个描述,下载的过程有如下几步: (1)客户端发起一个url请求,获取连接对象. (2)服务器解析url,并且将指定的资源返回一个输入流给客户. (3)建立存储的目录以及保存的文件名. (4)输出了写数据. (5)关闭输入流和输出流. 2.实现代码的方法 /** *

随机推荐