java上传附件,批量下载附件(一)
上传附件代码:借助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上传附件,批量下载附件(一)的更多相关文章
- java上传文件,下载文件
1.上传文件 1 protected int doTask(BaseForm form) throws AppException, FatalException, NoExistsException, ...
- java+上传大文件
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 先说下要求: PC端全平台支持,要求支持Windows,Mac,Linux 支持所 ...
- Java ftp 上传文件和下载文件
今天同事问我一个ftp 上传文件和下载文件功能应该怎么做,当时有点懵逼,毕竟我也是第一次,然后装了个逼,在网上找了一段代码发给同事,叫他调试一下.结果悲剧了,运行不通过.(装逼失败) 我找的文章链接: ...
- Jmeter和LR上传文件和下载
Jmeter和LR上传文件和下载 背景: 在某个申请业务中,需要上传附件文件,然后才能提交该申请 遇到的问题: 1, 在使用Jmeter或者LR进行录制时,无法录制到上传文件的请求,只能通过Fidd ...
- java上传excel文件及解析
java上传excel文件及解析 CreateTime--2018年3月5日16:25:14 Author:Marydon 一.准备工作 1.1 文件上传插件:swfupload: 1.2 文件上 ...
- Selenium(十一):设置元素等待、上传文件、下载文件
1. 设置元素等待 前面我们接触了几个元素等待方法,sleep.implicitly_wait方法,这一章我们就来整体学一下. 现在大多数Web应用程序使用的都是AJAX技术.当浏览器加载页面时,页面 ...
- edtftpj让Java上传FTP文件支持断点续传
在用Java实现FTP上传文件功能时,特别是上传大文件的时候,可以需要这样的功能:程序在上传的过程中意外终止了,文件传了一大半,想从断掉了地方继续传:或者想做类似迅雷下载类似的功能,文件太大,今天传一 ...
- java 上传文件到 ftp 服务器
1. java 上传文件到 ftp 服务器 package com.taotao.common.utils; import java.io.File; import java.io.FileInpu ...
- Struts2实现文件的上传与动态下载功能。
本篇主要使用Struts2实现文件的上传与动态下载功能.出于安全考虑,所以,在硬盘上存储上传的文件的时候,统一都重新命名为随机字符串.用数据库存储真实文件名与随机文件名称之间的关联. 下面的是实体类 ...
- .net core版 文件上传/ 支持批量上传,拖拽以及预览,bootstrap fileinput上传文件
asp.net mvc请移步 mvc文件上传支持批量上传,拖拽以及预览,文件内容校验 本篇内容主要解决.net core中文件上传的问题 开发环境:ubuntu+vscode 1.导入所需要的包:n ...
随机推荐
- 题解 BZOJ 1037 & Luogu P2592 [ZJOI2008]生日聚会
BZOJ & Luogu 老师说是背包?并没看出来QAQ 设f[i][j][o][p]表示已经选了i个人,j个男生,男生比女生最多多o个,女生比男生最多多p个时的方案数 两种转移: <= ...
- uoj207共价大爷游长沙
话说我可能还没有调出魔法森林呢...说好的lct第一题呢... 又是一个随机化的方法,毕竟又是判定性的问题 上次是判断无向图联通 这次是判断一些路径是否经过一条定边 若把路径上的边全部异或上一个路径的 ...
- 【手撸一个ORM】第八步、查询工具类
一.实体查询 using MyOrm.Commons; using MyOrm.DbParameters; using MyOrm.Expressions; using MyOrm.Mappers; ...
- TDH-search汇报理解
题目:海量数据查询开头:1.自我介绍:2.题目切入: 什么是海量数据查询?(海量数据,快速,符合要求) 几个常用场景(搜索引擎,百度:话单查询:影像平台,高铁)3.展示目录:架构,案例,平台规划 4. ...
- 【转】如何学习Javascript
首先要说明的是,咱现在不是高手,最多还是一个半桶水,算是入了JS的门. 谈不上经验,都是一些教训. 这个时候有人要说,“靠,你丫半桶水,凭啥教我们”.您先别急着骂,先听我说. 你叫一个大学生去教小学数 ...
- nodejs模块学习: webpack
nodejs模块学习: webpack nodejs 发展很快,从 npm 上面的包托管数量就可以看出来.不过从另一方面来看,也是反映了 nodejs 的基础不稳固,需要开发者创造大量的轮子来解决现实 ...
- .net程序员业余Android开发赚点外快(介绍一下自己的经验)
记得是11年10月份开始研究android的,当时还不会java,听说android比较火,自己也买了个垃圾android机,平时工作也不是特别忙,于是我就突发奇想,想试试做一下android应用可不 ...
- 【Java】 hashcode()和System.identityHashCode()
hashcode()和System.identityHashCode() openjdk8: http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/5b86f ...
- idea远程debug:tomcat
在tomcat的bin/startup.sh中添加: 27780debug的端口 declare -x CATALINA_OPTS="-server -Xdebug -Xnoagent -D ...
- github入门之更改提交操作--6
1.回溯历史版本 1.1.回溯到创建feature-A分支前 1.1.1.要让仓库的HEAD.暂存区.当前工作树回溯到指定状态,需要用到提供目标时间点的哈希值 1.1.2.回溯至未创建feature- ...