<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>文件上传引例</title>
</head>
<body>
<h2>引例---展示我们自己写底代码实现文件上传比较困难</h2>
<!-- 注意,具有file组件的表单,form标记必须添加属性:enctype="multipart/form-data",否则只会当成POST1方式提交(文件名可以上传,但不会提交文件内容) -->
<form action="<%=request.getContextPath()%>/upload0" method="post"
enctype="multipart/form-data">
File1: <input type="file" name="file1" /> <br /> 名称:<input
type="text" name="desc" /><br />
<!-- File2: <input type="file" name="file2" /> <br />-->
<input type="submit" />
</form>
</body>
</html>
UploadServlet0:
package cn.hncu.servlets;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.List;
import java.util.UUID;
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.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FileUtils;
public class UploadServlet0 extends HttpServlet {
/*
* 实现文件上传的基本套路 FileItemFactory f=new DiskFileItemFactory(1024*8,new
* File("d:/a"));//缓存,用于存放临时文件 ServletFileUpload upload=new
* ServletFileUpload(f); List<FileItem> list=upload.parseRequest(request);
* for(FileItem f:list){ //FileItem: 普通表单组件、file组件中的文件名、file组件所上传的文件数据
* //分别处理每一个FileItem }
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 为了下面把接收到的文件数据保存到服务器硬盘,得获取服务器硬盘地址
request.setCharacterEncoding("utf-8");
String path = getServletContext().getRealPath("/uploads");// 绝对地址
DiskFileItemFactory f = new DiskFileItemFactory(1024 * 8, new File(
"d:/a"));// 设置缓存大小和设置临时文件
ServletFileUpload upload = new ServletFileUpload(f);// 文件上传的解析器。如果不给实参f,则临时目录为默认的:Tomcat/temp下
upload.setFileSizeMax(1024 * 1024 * 5);// 设置每个文件最大5M
// 解析
try {
List<FileItem> list = upload.parseRequest(request);
for (FileItem ff : list) {
if (ff.isFormField()) {// 普通表单组件,本例为:参数desc
// String desc = ff.getString();//以默认编码来获取
String desc = ff.getString("UTF-8");//POST2方式下,普通表单组件的编码要在获取参数的方法中指定参数
System.out.print(desc);
} else {// input-file组件
String filename = ff.getName();// 接收文件名
System.out.println(filename);
// 由于服务器上的本地资源文件名不能用中文,因此要把文件名进行转换(本例用uuid来代替)
UUID uuid = UUID.randomUUID();
String uuid1 = uuid.toString().replaceAll("-", "");
String ext = filename.substring(filename.lastIndexOf("."));
String fn = uuid1 + ext;
InputStream in = ff.getInputStream();// 接收文件内容
// 我们可以自己写底层IO代码来接收in中的数据
FileUtils.copyInputStreamToFile(in, new File(path + "/"
+ fn));
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}