traditional API (传统方式)

//上传路径
File file = new File("C:/upload");
//临时文件路径
File tempFile = new File("C:/uploadtemp"); if(!file.exists()) {
file.mkdir();
} if(!tempFile.exists()) {
tempFile.mkdir();
}
//判断 request 是一个文件上传的 request
//通过 ServletFileUpload 类的静态方法 isMultipartContent 来判断
if(ServletFileUpload.isMultipartContent(request)) {
//用 DiskFileItemFactory 创建新的 file items (只是临时的)
//DiskFileItemFactory 创建FileItem 实例,并保存其内容在<b>内存</b>或者<b>硬盘中</b>
//通过一个阀值来决定这个 FileItem 实例是存放在<b>内存</b>或者<b>硬盘中</b>
DiskFileItemFactory factory = new DiskFileItemFactory();
//设置阀值大小
//不设置的话,默认10k
//超过这个阀值,FileItem将直接写入到磁盘
factory.setSizeThreshold(1024*10);
//设置临时文件夹
//不设置,默认为系统默认Temp文件路径,调用 System.getProperty("java.io.tmpdir") 获取
//超过阀值的 FileItem 实例将存放在这个目录中
factory.setRepository(tempFile);
//构造servletFileUpload 的实例,该实例提供工厂模式创建FileItem的DiskFileItemFactory实例
ServletFileUpload fileUpload = new ServletFileUpload(factory);
//设置一个<b>完整的请求</b>允许的最大大小(注意是完整请求,包括非file类型的表单,比如Text类型)
fileUpload.setSizeMax(10*1024*1024);
//设置所允许的最大的单个上传文件大小(对应一个FileItem对象)
//fileUpload.setFileSizeMax(10*1024*1024); try {
//每一个FileItem 对应一个 request 请求中from表单中的 input 元素
//解析 request 请求,将request中提交的值存入List数组
List<FileItem> items = fileUpload.parseRequest(request); for(FileItem item : items) {
//是不是一个文件上传组件
if(!item.isFormField()) {
String name = item.getName();
System.out.println("name:" + name);
System.out.println("length:" + item.getSize());
item.write(new File("C:/upload/"+name));
} else {
String desc = item.getString("UTF-8");
System.out.println("文件描述:" + desc);
}
}
} catch (Exception e) {
e.printStackTrace();
}
} else {
throw new RuntimeException("请设置form表单的enctype属性");
}

Streaming API

//设置文件上传路径
String UploadFilePath = "d:/upload";
//限制文件大小
//通过 request.getHeader("Content-Length") 获取request 请求内容长度来限制
if(ServletFileUpload.isMultipartContent(request)) { //创建ServletFileUpload实例
ServletFileUpload upload = new ServletFileUpload();
try {
//解析request 请求 并返回FileItemStream 的iterator 实例
FileItemIterator iter = upload.getItemIterator(req);
while (iter.hasNext()) {
FileItemStream item = iter.next();
String name = item.getFieldName();
InputStream stream = item.openStream();
if (item.isFormField()) {
System.out.println("Form field " + name + " with value "
+ Streams.asString(stream) + " detected.");
} else {
System.out.println("File field " + name + " with file name "
+ item.getName() + " detected.");
// Process the input stream
//System.out.println(Streams.asString(stream));
System.out.println("shuru:");
String filename = new Scanner(System.in).next();
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(new File("e:/upload"),"ez.zip")));
BufferedInputStream bis = new BufferedInputStream(stream);
byte[] buffer = new byte[1024];
int len = -1;
while (-1 != (len = bis.read(buffer))){
bos.write(buffer,0,len);
}
bis.close();
bos.flush();
bos.close(); PrintWriter out = resp.getWriter();
out.write("完成");
System.out.println("wanchengle ");
}
}
} catch (FileUploadException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
} else {
throw new RuntimeException("请设置form表单的enctype属性");
}

Commons FileUpLoad 两种上传方式解的更多相关文章

  1. GitHub两种上传方式的对比----SSH / https

    https://www.jianshu.com/p/1ac06bcd8ab5 https://www.cnblogs.com/lqfxyy/p/5740720.html https://blog.cs ...

  2. git commit -a -m "DM 1、获取aliOssSTS值,计算签名,实现视频PUT/POST2种上传方式上传;"

    git commit -a -m "DM 1.获取aliOssSTS值,计算签名,实现视频PUT/POST2种上传方式上传:" 微信小程序的视频上传

  3. Selenium系列(十一) - 针对两种上传文件方式的实现方案

    如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...

  4. web 中常用的两种上传文件的方法总结

    这里我们来总结整理一下常用的两种文件上传方式以及要注意的东西: 1.springmvc .MultipartFile 的上传方式. 2.org.apache.commons.fileupload 使用 ...

  5. upload三种上传方式(上)---Servlet---post---commons-fileupload.1.2.1.jar方式请求上传文件

    上传前进行的配置选项: 1.在下方的Servers中,右键你的tomcat--open,选中下面两个配置. 第一个:Serve modules without publishing 作用:tomcat ...

  6. Web的几种上传方式总结

    问题 文件上传在WEB开发中应用很广泛. 文件上传是指将本地图片.视频.音频等文件上传到服务器上,可以供其他用户浏览或下载的过程. 以下总结了常见的文件(图片)上传的方式和要点处理. 表单上传 这是传 ...

  7. hadoop中两种上传文件方式

    记录如何将本地文件上传至HDFS中 前提是已经启动了hadoop成功(nodedate都成功启动) ①先切换到HDFS用户 ②创建一个user件夹 bin/hdfs dfs -mkdir /user ...

  8. Apache Commons FileUpload实现文件上传

    一.Apache Commons-FileUpload简介 Apache Commons是一个专注于可重用Java组件的所有方面的 Apache 项目. Apache Commons项目由三个部分组成 ...

  9. Apache Commons fileUpload实现文件上传之一

      需要两个jar包: commons-fileupload.jar Commons IO的jar包(本文使用commons-io-2.4.jar) 利用Servlet来实现文件上传. package ...

随机推荐

  1. OpenVPN配置网桥模式的一些理解

    说明: 1.网桥的作用是将所有的网卡都能直连主机所在的路由器,可以把它当做一个独立的PC. 2.OpenVPN设置成网桥之后,IP设置成主机所在的IP网段,这样客户端连接进来之后就是所在主机所在的网络 ...

  2. 15KW电动机380V及220V时的电流分别为多少

    15KW电动机380V及220V时的电流分别为多少 当用电电压为380V时:P=UICOSφ/1.72,此时电流为: I=15KW/380V/0.83(COSφ,功率因数)/1.72x1000=27. ...

  3. rabbitmq 连接測试

    1.假设写错了host (如:factory.setHost("locathost"); )报错: Exception in thread "main" jav ...

  4. 查看系统自带的RPM

    我在home目录下创建了目录mei 1.管理员权限 su 2.进入mei目录 cd /home/mei 3.创建cdrom目录作为挂载点 mkdir cdrom 4.把目录 /dev/cdrom-hd ...

  5. node.js&pm2搭建node生产环境

    node.js下载地址https://nodejs.org/en/download/stable/ 下载截图 建议采用稳定编译过的版本,source code稍麻烦,编译过的直接可用,安装超级简单,红 ...

  6. .NET:命令行解析器介绍

    背景 经常需要开发一下小工具,之前都是自己解析命令行参数,接触过动态语言社区以后,发现命令行解析有特定的模式和框架可以利用,本文介绍一个 .NET 平台的类库. 示例 需求 拷贝文件,如:CopyFi ...

  7. 一张图彻底了解Unity脚本的生命周期

    以前没好好看Unity的脚本手册,原来写的是这么的全...尤其起yield  www  协同 这部分看了这张图彻底的懂了..

  8. 全负荷的 Node.js[转载]

    一个Node.JS 的进程只会运行在单个的物理核心上,就是因为这一点,在开发可扩展的服务器的时候就需要格外的注意. 因为有一系列稳定的API,加上原生扩展的开发来管理进程,所以有很多不同的方法来设计一 ...

  9. [转]MySQL Explain

    Mysql Explain 详解 一.语法 explain < table_name > 例如: explain select * from t3 where id=3952602; 二. ...

  10. Flume目录

    1. Flume的安装配置 2. flume和kafka整合(转) 3. Flume NG 配置详解(转) 4. Flume-NG一些注意事项(转) 5. FLume监控文件夹,将数据发送给Kafka ...