Apache FileUpload的两种上传方式介绍及应用_JSP编程

环境
tomcat5.6
commmons-fileupload-1.3.jar
commmons-io-2.4.jar
JSP
编码:UTF-8
临时文件夹:fileupload/tmp相对于网站根目录
上传文件保存位置:fileupload
Traditional API上传方式
//fileload01.htm

复制代码 代码如下:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<html>
<body>
<form method="POST" enctype="multipart/form-data" action="traditionalapi.jsp">
File to upload: <input type="file" name="file" size="40"><br/>
<input type="submit" value="Press"> to upload the file!
</form>
</body>
</html>

//traditionalapi.jsp

复制代码 代码如下:

<%@page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" language="java"%>
<%@page import="java.io.File"%>
<%@page import="java.util.List"%>
<%@page import="org.apache.commons.fileupload.*"%>
<%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%
request.setCharacterEncoding("UTF-8");
// file less than 10kb will be store in memory, otherwise in file system.
final int threshold = 10240;
final File tmpDir = new File(getServletContext().getRealPath("/") + "fileupload" + File.separator + "tmp");
final int maxRequestSize = 1024 * 1024 * 4; // 4MB
// Check that we have a file upload request
if(ServletFileUpload.isMultipartContent(request))
{
// Create a factory for disk-based file items.
FileItemFactory factory = new DiskFileItemFactory(threshold, tmpDir);

// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// Set overall request size constraint.
upload.setSizeMax(maxRequestSize);
List<FileItem> items = upload.parseRequest(request); // FileUploadException
for(FileItem item : items)
{
if(item.isFormField()) //regular form field
{
String name = item.getFieldName();
String value = item.getString();
%>
<h1><%=name%> --> <%=value%></h1>
<%
}
else
{ //file upload
String fieldName = item.getFieldName();
String fileName = item.getName();
File uploadedFile = new File(getServletContext().getRealPath("/") +
"fileupload" + File.separator + fieldName + "_" + fileName);
item.write(uploadedFile);
%>
<h1>upload file <%=uploadedFile.getName()%> done!</h1>
<%
}
}
}
%>

Streaming API上传方式
//fileupload02.htm

复制代码 代码如下:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<html>
<body>
<form method="POST" enctype="multipart/form-data" action="streamingapi.jsp">
File to upload: <input type="file" name="file" size="40"><br/>
<input type="submit" value="Press"> to upload the file!
</form>
</body>
</html>

//streamingapi.jsp

复制代码 代码如下:

<%@page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" language="java"%>
<%@page import="java.io.*"%>
<%@page import="java.util.List"%>
<%@page import="org.apache.commons.fileupload.*"%>
<%@page import="org.apache.commons.fileupload.util.Streams"%>
<%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%
request.setCharacterEncoding("UTF-8");
// Check that we have a file upload request
if(ServletFileUpload.isMultipartContent(request))
{
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload();

// Parse the request
FileItemIterator iter = upload.getItemIterator(request);
while(iter.hasNext())
{
FileItemStream item = iter.next();
String fieldName = item.getFieldName();
InputStream is = item.openStream();
if(item.isFormField()) //regular form field
{
%>
<!-- read a FileItemStream's content into a string. -->
<h1><%=fieldName%> --> <%=Streams.asString(is)%></h1>
<%
}
else
{ //file upload
String fileName = item.getName();
File uploadedFile = new File(getServletContext().getRealPath("/") +
"fileupload" + File.separator + fieldName + "_" + fileName);
OutputStream os = new FileOutputStream(uploadedFile);
// write file to disk and close outputstream.
Streams.copy(is, os, true);
%>
<h1>upload file <%=uploadedFile.getName()%> done!</h1>
<%
}
}
}
%>

Traditional API vs Streaming API
Streaming API上传速度相对较快。因为它是利用内存保存上传的文件,节省了传统API将文件写入临时文件带来的开销。
可参考:
http://stackoverflow.com/questions/11620432/apache-commons-fileupload-streaming-api
This page describes the traditional API of the commons fileupload library. The traditional API is a convenient approach. However, for ultimate performance, you might prefer the faster Streaming API.
http://commons.apache.org/proper/commons-fileupload/using.html

时间: 2024-09-17 04:34:53

Apache FileUpload的两种上传方式介绍及应用_JSP编程的相关文章

小米MI Pay怎么刷卡支付,小米MI Pay两种刷卡方式介绍

MI Pay刷卡流程 相较于传统的刷卡方式,MI Pay更加便捷安全,手机就是银行卡. MI Pay的两种刷卡方式 1.息屏或锁屏状态下,双击Home键呼出MI Pay,选择需要使用的银行卡,根据提示验证指纹之后即可靠近POS刷卡.(注:6.8.22开发版及以后版本支持双击Home键唤起MI Pay) 2.在收银员设置好POS之后,将手机靠近POS的感应区,手机上会自动弹出MI Pay页面.选择需要使用的银行卡,根据提示验证指纹之后即可靠近POS刷卡. 小米MI Pay怎么刷卡支付,小米MI P

jsp实现文件上传下载的程序示例_JSP编程

一.文件上传上传文件是Web开发中经常要用到的功能:例如在基于B/S的人事信息管理系统中上传照片,在新闻发布系统中上传图片等等.....要实现文件上传功能,就需要综合利用java中的文件输入和输出相关的类.在TCP/IP中,最早出现的文件上传机制是FTP.它是将文件由客服端发送到服务器的标准机制,能够考虑到跨平台的文本和二进制格式文件.但是在jsp编程中不能使用FTP方法来上传文件,这是由jsp 运行机制所决定的.下面是上传文件的jsp页面: 复制代码 代码如下: <form action=&quo

perl中子程序中参数的两种引用(传递)方式介绍_perl

下面是一个例子: 复制代码 代码如下: use strict;#这里是两个数组my @i =('1','2','3');my @j =('a','b','c'); #在进行处理之前,我们把他们先打印出来,看一看他们的样子print "In main program before calling subroutine:i="."@i\n";print "In main program before calling subroutine:j=".&q

利用apache的FileUpload组件实现文件上传

1.可以实现一个或多个文件的上传,也可以接收普通的form表单数据. 2.简单测试了一下,对内存的占用还是可以忍受的,而且速度也可以.偶尔会导致内存使用的上升而且不会下降,长时间后是否会降下来还没有测试. 关键点: 1.提交文件上传的form的method属性为post,enctype属性为multipart/form-data. 2.input标签需要有name属性,否则取不到内容. 看看servlet的实现,注释已经很详细了: Java代码 package org.xxm; import j

Web应用安全之八种安全的文件上传方式(1)

为了让最终用户将 文件上传到您的网站,就像是给危及您的服务器的恶意用户打开了另一扇门.即便如此,在今天的现代互联网的Web应用程序,它是一种常见的要求,因为它有助于提高您的业务效率.在Facebook和Twitter等社交网络的Web应用程序,允许文件上传.也让他们在博客,论坛,电子银行网站,YouTube和企业支持门户,给机会给最终用户与企业员工有效地共享文件.允许用户上传图片,视频,头像和许多其他类型的文件.498)this.w idth=498;' onmousewheel = 'java

jsp如何用fileupload实现照片的上传和下载?

问题描述 在网上找的一段程序,但没调通,请大家看看原因,谢谢阿!主要问题是1.item.write(savedFile);这句好像没上传上文件,上传到服务器的存储路径在哪里呀?2.如果能实现上传的话,能否在一个文本框实现多种文档格式的混合上传呀,就是在一个文件输入框里,又能上传照片,又能上传文档?post.jsp:<%@pagelanguage="java"import="java.util.*"pageEncoding="gb2312"%

Nginx使用的php-fpm的两种进程管理方式及优化_nginx

PS:前段时间配置php-fpm的时候,无意中发现原来它还有两种进程管理方式.与Apache类似,它的进程数也是可以根据设置分为动态和静态的. php-fpm目前主要又两个分支,分别对应于php-5.2.x的版本和php-5.3.x的版本.在5.2.x的版本中,php-fpm.conf使用的是xml格式,而在新的5.3.x版本中,则是和php.ini一样的配置风格. 在5.2.x版本中,php-fpm.conf中对于进程管理号称是有两种风格,一种是静态(static)的,一种是类似于apache

不用fileUpload控件如何上传文件?

问题描述 不用fileUpload控件如何上传文件? 解决方案 解决方案二:http://hi.baidu.com/kmiaoer/blog/item/da77ceef2b127a37acafd593.html解决方案三:看看~!收藏别人的,对你有帮助~~解决方案四:不用控件你可以开发客户端ActiveX控件来上传,类似现在网易.TOM相册那样的上传方式解决方案五:有好东西!解决方案六:加我QQ66516186发你DEMO解决方案七:用ftp

UIButton的两种block传值方式

UIButton的两种block传值方式 方式1 - 作为属性来传值 BlockView.h 与 BlockView.m // // BlockView.h // Block // // Created by YouXianMing on 15/1/14. // Copyright (c) 2015年 YouXianMing. All rights reserved. // #import <UIKit/UIKit.h> @class BlockView; /** 定义枚举值 */ typed