1.需要两个jar包commons-fileupload-1.2.1.jar和commons-io-1.4.jar
2.几个文件:index.jsp 登录页面文件
web.xml 配置启动项
message.jsp 表示成功的页面文件
upload.java servlet 类文件
3.web.xml "/servlet/类文件"表示跳转页面的网址:localhost:端口/工程名/servlet/类文件
<servlet>
<servlet-name>类文件</servlet-name>
<servlet-class>包.类文件</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>类文件</servlet-name>
<url-pattern>/servlet/类文件</url-pattern>
</servlet-mapping>
4.index.jsp enctype支持多文件上传 action表示submit指向的类文件
<pre name="code" class="javascript"><body>
<form action="servlet/类文件" enctype="multipart/form-data" method="post">
上传用户:<input type="text" name="username"><br/>
上传文件1:<input type="file" name="file1"><br/>
上传文件2:<input type="file" name="file2"><br/>
<input type="submit" value="提交">
</form>
</body>
5.upload.java
<pre name="code" class="java">package me.gacl.web.controller;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
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.FileUploadBase;
import org.apache.commons.fileupload.ProgressListener;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UploadHandleServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String savePath = this.getServletContext().getRealPath("/WEB-INF/upload");
String tempPath = this.getServletContext().getRealPath("/WEB-INF/temp");
File tmpFile = new File(tempPath);
if (!tmpFile.exists()) {
tmpFile.mkdir();
}
String message = "";
try{
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(1024*100);
factory.setRepository(tmpFile);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setProgressListener(new ProgressListener(){
public void update(long pBytesRead, long pContentLength, int arg2) {
System.out.println("文件大小为:" + pContentLength + ",当前已处理:" + pBytesRead);
}
});
upload.setHeaderEncoding("UTF-8");
if(!ServletFileUpload.isMultipartContent(request)){
return;
}
upload.setFileSizeMax(1024*1024);
upload.setSizeMax(1024*1024*10);
List<FileItem> list = upload.parseRequest(request);
for(FileItem item : list){
if(item.isFormField()){
String name = item.getFieldName();
String value = item.getString("UTF-8");
//value = new String(value.getBytes("iso8859-1"),"UTF-8");
System.out.println(name + "=" + value);
}else{
String filename = item.getName();
System.out.println(filename);
if(filename==null || filename.trim().equals("")){
continue;
}
filename = filename.substring(filename.lastIndexOf("\\")+1);
String fileExtName = filename.substring(filename.lastIndexOf(".")+1);
System.out.println("上传的文件的扩展名是:"+fileExtName);
InputStream in = item.getInputStream();
String saveFilename = makeFileName(filename);
String realSavePath = makePath(saveFilename, savePath);
FileOutputStream out = new FileOutputStream(realSavePath + "\\" + saveFilename);
byte buffer[] = new byte[1024];
int len = 0;
while((len=in.read(buffer))>0){
out.write(buffer, 0, len);
}
in.close();
out.close();
message = "文件上传成功!";
}
}
}catch (FileUploadBase.FileSizeLimitExceededException e) {
e.printStackTrace();
request.setAttribute("message", "单个文件超出最大值!!!");
request.getRequestDispatcher("/message.jsp").forward(request, response);
return;
}catch (FileUploadBase.SizeLimitExceededException e) {
e.printStackTrace();
request.setAttribute("message", "上传文件的总的大小超出限制的最大值!!!");
request.getRequestDispatcher("/message.jsp").forward(request, response);
return;
}catch (Exception e) {
message= "文件上传失败!";
e.printStackTrace();
}
request.setAttribute("message",message);
request.getRequestDispatcher("/message.jsp").forward(request, response);
}
private String makeFileName(String filename){
return UUID.randomUUID().toString() + "_" + filename;
}
private String makePath(String filename,String savePath){
int hashcode = filename.hashCode();
int dir1 = hashcode&0xf;
int dir2 = (hashcode&0xf0)>>4;
String dir = savePath + "\\" + dir1 + "\\" + dir2; //upload\2\3 upload\3\5
if(!file.exists()){
file.mkdirs();
}
return dir;
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
</pre><p></p><p>上传的文件存放在workspace/.metadata/.plugins/org.eclipse..wst.server.core/tmp0/wtpwebapps/工程名/WEB-INF里面</p><pre>