1、上传页面 ,注意的两点,一是method要为post,二是enctype等于multipart/form-data
<form action="servlet/item/UploadItemServlet" method="post"
enctype="multipart/form-data" name="form1">
<input type="file" name="file">
<input type="submit" name="Submit" value="upload">
</form>
2、servlet
public class UploadItemServlet extends HttpServlet {
private String uploadPath = "D:\\"; // 用于存放上传文件的目录
private File tempPath = new File("D:\\tmp\\"); // 用于存放临时文件的目录
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
//如果文件夹不存在就创建一个
if(!tempPath.exists()){
tempPath.mkdir();
}
DiskFileItemFactory factory = new DiskFileItemFactory();
// setSizeThreshold方法用于设置是否将上传文件已临时文件的形式保存在磁盘的临界值(以字节为单位的int值),
//如果从没有调用该方法设置此临界值,将会采用系统默认值10KB。对应的getSizeThreshold()方法用来获取此临界值。
factory.setSizeThreshold(4096);
System.getProperty("java.io.tmpdir");
// setRepositoryPath方法用于设置当上传文件尺寸大于setSizeThreshold方法设置的临界值时,
//将文件以临时文件形式保存在磁盘上的存放目录。有一个对应的获得临时文件夹的 File getRespository() 方法。
//注意:当从没有调用此方法设置临时文件存储目录时,默认采用系统默认的临时文件路径,可以通过系统属性 java.io.tmpdir 获取
factory.setRepository(tempPath);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(1024 * 1024 * 20);//设置最大上传20M
List fileItems;
try {
fileItems = upload.parseRequest(req);
for (Iterator iter = fileItems.iterator();iter.hasNext();) {
FileItem item = (FileItem) iter.next();
// 忽略其他不是文件域的所有表单信息
if (!item.isFormField()) {
String fileName = item.getName();
long size = item.getSize();
if ((fileName == null || fileName.equals("")) && size == 0)
continue;
//截取 F:\相册\2014\20140706_145414.jpg
fileName = fileName.substring(fileName.lastIndexOf("\\")+1,fileName.length());
item.write(new File(uploadPath + fileName));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
3配置文件
<servlet>
<servlet-name>UploadItemServlet</servlet-name>
<servlet-class>com.study.drp.basedata.web.UploadItemServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadItemServlet</servlet-name>
<url-pattern>/servlet/item/UploadItemServlet</url-pattern>
</servlet-mapping>