上传附件代码:借助commons-fileupload-1.2.jar

package com.str;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class UploadServlet extends HttpServlet {
 
 @Override
 protected void doPost(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
   doGet(req, resp);
 }
 
 
 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  
  HttpServletRequest request = (HttpServletRequest)req; 
  HttpServletResponse response = (HttpServletResponse)resp; 
  
 /* response.setContentType("text/html;charset=gb2312");
  response.setCharacterEncoding("utf-8");*/
  
  OutputStream outputStream = null;   
  InputStream inputStream = null;
  
  DiskFileItemFactory factory = new DiskFileItemFactory(); 
  ServletFileUpload fileUpload = new ServletFileUpload(factory);
 
  try {
   List items = fileUpload.parseRequest(request); 
   for (Iterator iterator = items.iterator(); iterator.hasNext();) {   
    FileItem name = (FileItem) iterator.next();               
    if(!name.isFormField()){                     
     String fieldName  = name.getFieldName();  //这个是name值
     String fileName = name.getName();     //这个是全路径
     String lastFileName ="";
     
     //这句话获取的是源文件的原名称,不做任何修改
     String oldNamePath = fileName.substring(fileName.lastIndexOf("\\")+1);
     
     if(fileName.endsWith(".docx")|| fileName.endsWith(".xls")){
      
      lastFileName = request.getRealPath("/")+"\\upload\\"+ oldNamePath;
      outputStream = new FileOutputStream(new File(lastFileName )); 
      
      inputStream = name.getInputStream();                  
      byte[] bs = new byte[1024];                     
      int length = 0;                     
      while(null != inputStream && (length = inputStream.read(bs))!=-1){            
       outputStream.write(bs);    
      }  
     }
     outputStream.flush();
     }                            
    //把lastFileName存到数据库(这里就不写了不只lz用的什么方式)} 
   }
  } catch (Exception e) {
   e.printStackTrace();
  }

}
}

单个下载文件,批量下载文件代码:借助于ant.jar包的ZipOutputStream、ZipEntry

package com.str;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;

public class LoadServlet  extends HttpServlet {
 
 @Override
 /*protected void doGet(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  
  String path = getServletContext().getRealPath("/") + "\\upload";
  OutputStream o = resp.getOutputStream();
  byte b[] = new byte[1024];
  
  //这个地方的文件,可以从数据库中动态查找,我这边写死了为了简单展示
  File fileLoad = new File(path, "解析类型配置.xls");
  
  String filename = new String("解析类型配置.xls".getBytes("gbk"), "iso8859-1");

System.out.println(filename);
  
  我记得在Excel导出数据的时候说过filename千万别写中文,其实经过以下:
  String filename = new String("解析类型配置.xls".getBytes("gbk"), "iso8859-1"); 
  转换以后,文件无论是中文、英文,都不会出现乱码情况,本人已验证
  
  resp.setHeader("Content-disposition", "attachment;filename="+ filename);
  
  long fileLength = fileLoad.length();    
  String length = String.valueOf(fileLength);   
  resp.setHeader("Content_Length", length);  
  FileInputStream in = new FileInputStream(fileLoad);      
  int n = 0;      
  while ((n = in.read(b)) != -1) {   
   o.write(b, 0, n);
   }
 }*/

//以上是单个下载附件,这边是批量压缩下载附件
 protected void doGet(HttpServletRequest req, HttpServletResponse resp)
 throws ServletException, IOException {
  
  String zipFileName = "test.zip";
  
  //这些文件都是存在的,我是写死了的,可以从页面传名称过来
  String[] filePathArray = {"1.jpg","2.jpg","3.xls","测试.docx"};   
  String path = getServletContext().getRealPath("/") + "\\image";
  
  resp.setContentType("application/x-msdownload" ); // 通知客户文件的MIME类型:
  resp.setHeader("Content-disposition","attachment;filename=" + zipFileName);
  
  ZipOutputStream zos = new ZipOutputStream(resp.getOutputStream());
  
  for (String filePath : filePathArray) {
   File file = new File(path + File.separator + filePath);
   doZip(file, zos);
  }   
  zos.close();
 }
 
 //处理批量下载时候,文件压缩问题
 private void doZip(File file, ZipOutputStream zos) throws IOException {
  if(file.exists()) {
   if (file.isFile()) {
    //如果是文件,写入到 zip 流中
    String fileName = file.getName();
    
    ZipEntry zet = new ZipEntry(file.getName());
    zos.putNextEntry(zet);
    FileInputStream fis = new FileInputStream(file);
    byte[] buffer = new byte[1024];
    int r = 0;
    while ((r = fis.read(buffer)) != -1) {
     zos.write(buffer, 0, r);
    }
    zos.setEncoding("gbk");   //这个地方很重要
    zos.flush();    
    fis.close();
   }else {
    System.out.println("不是文件,那就不下载了,因为前台会做处理,此处就不在一步步进行验证了!");
   }
  }
 }

}

java上传附件,批量下载附件(一)的更多相关文章

  1. java上传文件,下载文件

    1.上传文件 1 protected int doTask(BaseForm form) throws AppException, FatalException, NoExistsException, ...

  2. java+上传大文件

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 先说下要求: PC端全平台支持,要求支持Windows,Mac,Linux 支持所 ...

  3. Java ftp 上传文件和下载文件

    今天同事问我一个ftp 上传文件和下载文件功能应该怎么做,当时有点懵逼,毕竟我也是第一次,然后装了个逼,在网上找了一段代码发给同事,叫他调试一下.结果悲剧了,运行不通过.(装逼失败) 我找的文章链接: ...

  4. Jmeter和LR上传文件和下载

    Jmeter和LR上传文件和下载 背景: 在某个申请业务中,需要上传附件文件,然后才能提交该申请 遇到的问题: 1,  在使用Jmeter或者LR进行录制时,无法录制到上传文件的请求,只能通过Fidd ...

  5. java上传excel文件及解析

      java上传excel文件及解析 CreateTime--2018年3月5日16:25:14 Author:Marydon 一.准备工作 1.1 文件上传插件:swfupload: 1.2 文件上 ...

  6. Selenium(十一):设置元素等待、上传文件、下载文件

    1. 设置元素等待 前面我们接触了几个元素等待方法,sleep.implicitly_wait方法,这一章我们就来整体学一下. 现在大多数Web应用程序使用的都是AJAX技术.当浏览器加载页面时,页面 ...

  7. edtftpj让Java上传FTP文件支持断点续传

    在用Java实现FTP上传文件功能时,特别是上传大文件的时候,可以需要这样的功能:程序在上传的过程中意外终止了,文件传了一大半,想从断掉了地方继续传:或者想做类似迅雷下载类似的功能,文件太大,今天传一 ...

  8. java 上传文件到 ftp 服务器

    1.  java 上传文件到 ftp 服务器 package com.taotao.common.utils; import java.io.File; import java.io.FileInpu ...

  9. Struts2实现文件的上传与动态下载功能。

    本篇主要使用Struts2实现文件的上传与动态下载功能.出于安全考虑,所以,在硬盘上存储上传的文件的时候,统一都重新命名为随机字符串.用数据库存储真实文件名与随机文件名称之间的关联. 下面的是实体类 ...

  10. .net core版 文件上传/ 支持批量上传,拖拽以及预览,bootstrap fileinput上传文件

    asp.net mvc请移步 mvc文件上传支持批量上传,拖拽以及预览,文件内容校验 本篇内容主要解决.net core中文件上传的问题  开发环境:ubuntu+vscode 1.导入所需要的包:n ...

随机推荐

  1. [LOJ 2070] 「SDOI2016」平凡的骰子

    [LOJ 2070] 「SDOI2016」平凡的骰子 [题目链接] 链接 [题解] 原题求的是球面面积 可以理解为首先求多面体重心,然后算球面多边形的面积 求重心需要将多面体进行四面体剖分,从而计算出 ...

  2. GYM 101572A(单调队列优化dp)

    要点 较好的思路解析 \(dp[i]\)为到达\(i\)花费的最短时间,\(dis[i]-dis[j]<=lim1\)的情况其实可以省略,因为就相当于没买咖啡,绝对不优于在那之前的某店买了咖啡并 ...

  3. python isinstance函数 判断元素是否是字符串、int型、float型

    isinstance(1, int) 判断是否是int型isinstance(1.0, float) 判断是否是float型isinstance(s, str) 判断是否是字符串型isinstance ...

  4. Ubuntu下安装nginx及使用

    首先介绍以下nginx.下图来自百科介绍:详细介绍地址:https://baike.baidu.com/item/nginx/3817705?fr=aladdin 在我们平时的开发娱乐中,也许并不会涉 ...

  5. Linux之shell命令实现-批量去掉文件名中空格,以及批量修改文件名为数字序号文件名

    1 shell下批量出去文件名中的空格 执行看现象: 上面的是执行for循环以后看到的: 然而源目录下的文件如下: 这样的话想要cat某个具体文件是拿不到的,所以需要去空格处理: 处理方式有很多:如 ...

  6. springmvc httprequest 使用@Autowired注解

    springmvc httprequest 使用@Autowired注解我一直有个疑问,就是注解后每次的httprequest 是不是都一样的了,然后会不会引发多线程问题? 代码如下: import ...

  7. Error: Trying to open unclosed connection.

    错误:试图打开未关闭的连接.在我自己写model文件的时候,重复打开了连接数据库的操作,所以报这种错误. 错误实例: 两个model文件: userModel.js var mongoose = re ...

  8. RHEL/CentOS 7.X 安装笔记

    配置vim # 配置 vim 编辑器 yum install vim rm /usr/bin/vi ln -s /usr/bin/vim /usr/bin/vi vi /etc/vimrc # 开启语 ...

  9. hystrix 应用问题

    1.问题总结, 如果项目中使用了ThreadLocal,注意hystix创建新线程时,ThreadLocal中存的是之前线程中的数据,在hystix线程中获取不到 2.问题 throwable异常参数 ...

  10. TC和脚本语言

    TC:Turbo C 集成开发环境是由Borland 公司开发的一套C 语言开发工具,它集成了程序编辑.调试.链接等多种功能.在DOS 系统时代,Turbo C 是被最广泛使用的一种PC 机应用程序开 ...