加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 教程 > 正文

Apache FileUpload的两种上传方式阐述及应用

发布时间:2023-07-14 14:37:38 所属栏目:教程 来源:
导读:环境:

tomcat5.6

commmons-fileupload-1.3.jar

commmons-io-2.4.jar

JSP

编码:UTF-8

临时文件夹:fileupload/tmp相对于网站根目录

上传文件保存位置:fileupload

Traditional API
环境:
 
tomcat5.6
 
commmons-fileupload-1.3.jar
 
commmons-io-2.4.jar
 
JSP
 
编码:UTF-8
 
临时文件夹:fileupload/tmp相对于网站根目录
 
上传文件保存位置:fileupload
 
Traditional API上传方式
 
//fileload01.htm
 
复制代码 代码如下:www.CuoXIn.com
 
<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
 
复制代码 代码如下:www.CuoXIn.com
 
<%@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
 
复制代码 代码如下:www.CuoXIn.com
 
<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
 
复制代码 代码如下:www.CuoXIn.com
 
<%@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.
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!