首页 技术 正文
技术 2022年11月7日
0 收藏 564 点赞 623 浏览 2850 个字

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属性");
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,085
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,560
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,409
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,182
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,819
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,902