为了实现文件上传,实现我们表单必须设置一个属性:
enctype="multipart/form-data"。
先看上传的jsp页面:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<form enctype="multipart/form-data" method="post" action="Fileupload">
上传文件1<input type="file" name="file1"/><br/>
上传文件2<input type="file" name="file2"/><br/>
普通文本域1<input type="text" name="text1"/><br/>
普通文本域2<input type="text" name="text2"/><br/>
<input type="submit" value="上传"><br/>
</form>
</body>
</html>
实现上传功能的servlet
package com.servlet;
import java.io.File;
import java.io.IOException;
import java.util.List;
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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class Fileupload extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
DiskFileItemFactory factory = new DiskFileItemFactory();
//设定目录
String path = request.getRealPath("/upload");
//当文件大于某个尺寸时,不能直接写到内存中了,必须写到磁盘中,这个函数用来设定存储到磁盘
//中的路径
factory.setRepository(new File(path));
//用来设定当大于多少时,才必须直接写入硬盘
factory.setSizeThreshold(1024 * 1024);
ServletFileUpload sf = new ServletFileUpload(factory);
try {
List<FileItem> items = sf.parseRequest(request);
for(FileItem item : items)
{
//isFormField()判断是不是只是简单的文本域,如果是简单的文本域就不存储
if(item.isFormField())
{
System.out.println("普通的文本域");
}
//否则就是文件
else
{
//获取文件名
String value = item.getName();
//因为fileload针对 苹果浏览器 获得 的并不是 简单的 文件名 而已, 所以
//我们需要手动 把 前面的路径信息给去掉,当没有\的时候,start=-1
int start = value.lastIndexOf("\\");
//截取出我们需要的文件名
String fileName = value.substring(start +1 );
//把文件写到磁盘上
item.write(new File(path,fileName));
System.out.println("文件");
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}