1.新建项目,将commons-fileupload-1.3.3.jar和commons-io-2.6.jar两个包放入lib中
2.设置表单的enctype属性<form enctype="multipart/form-data" method="post"><input type="file" name="fileUpload"/></form>
3.新建两个文件夹,临时文件夹temp;上传文件位置upload;
这是单个文件上传
代码如下:
SingleFileUpload.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script src="js/FileUploadJs.js"></script>
<style type="text/css">
span{color:red;}
</style>
</head>
<body>
<span>${msg }</span>
<form action="SingleFileUploadServlet" method="post" enctype="multipart/form-data">
<table style="text-align: center;">
<tr>
<td>用户名</td>
<td><input type="text" name="username" /></td>
</tr>
<tr>
<td>密码</td>
<td><input type="password" name="password" /></td>
</tr>
<tr>
<td><input type="file" name="file" id="file" onchange="fileup(this);" /></td>
<td><input type="submit" value="确定上传"/></td>
</tr>
</table>
</form>
</body>
</html>
SingleFileUploadServlet
package com.sfupload.servlet;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
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.FileUploadBase;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
/**
* Servlet implementation class SingleFileUploadServlet
*/
public class SingleFileUploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public SingleFileUploadServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取文件夹的目录
String uploadPath = this.getServletContext().getRealPath("/upload");
String tempPath = this.getServletContext().getRealPath("/temp");
//步骤1:创建DiskFileItemFactory对象 临时目录
DiskFileItemFactory disk = new DiskFileItemFactory(1024*10,new File(tempPath));//文件大小
//步骤2:创建ServletFileUpload对象 接收临时文件disk
ServletFileUpload upload = new ServletFileUpload(disk);
//限制整个请求的大小
upload.setSizeMax(1024*1024);//最大bit(2M)
//步骤3:调用parseRequest()方法 转换请求
try {
List<FileItem> fileItems = upload.parseRequest(request);
for (FileItem fileItem : fileItems) {
// System.out.println(fileItem);
if(fileItem.isFormField()){//是否为普通的表单数据
//获取名
String name = fileItem.getFieldName();
String name2 = fileItem.getName();
// System.out.println(name);
//获取值
String value = fileItem.getString("utf-8");//控制获取到的值是中文
// System.out.println(value);
}else{
//获取名
String name = fileItem.getName();//获取扩展名
// System.out.println(name);
//获取文件的扩展名(最后一个.之后的内容)
String nameExt = name.substring(name.lastIndexOf(".")+1);
// System.out.println("扩展名是:"+nameExt);
List<String> names = new ArrayList<String>();
names.add("jpg");
names.add("gif");
names.add("jpeg");
names.add("png");
if(!(names.contains(nameExt))){//文件格式不合法 只能jpg、gif、jpeg三个格式
//设置提示信息
request.setAttribute("msg", " 只能jpg、gif、jpeg、png四个格式");
request.getRequestDispatcher("SingleFileUpload.jsp").forward(request, response);
}else{
//输入流对象
InputStream is = fileItem.getInputStream();
//文件关联对象
File file = new File(uploadPath + "/" + name);
//输出流对象
FileOutputStream fos = new FileOutputStream(file);
//复制
byte[] buf = new byte[1024];
int len = 0;
while((len=is.read(buf))!=-1){//-1是末尾
fos.write(buf, 0, len);
}
//关流
fos.flush();//刷新
fos.close();
is.close();
}
}
}
} catch(FileUploadBase.SizeLimitExceededException e){
//设置提示信息
request.setAttribute("msg", "请求超过了设定的最大值");
request.getRequestDispatcher("SingleFileUpload.jsp").forward(request, response);
}catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
js代码(这个是网上查的,可参考:http://www.haorooms.com/post/js_inputfileupload)
var isIE = /msie/i.test(navigator.userAgent) && !window.opera;
function fileup(target) {
var fileSize = 0;
if(isIE && !target.files) {
var filePath = target.value;
var fileSystem = new ActiveXObject("Scripting.FileSystemObject");
var file = fileSystem.GetFile(filePath);
fileSize = file.Size;
} else {
fileSize = target.files[0].size;
}
var size = fileSize / 1024;
if(size > 2000) {
alert("附件不能大于2M");
target.value = "";
return
}
var name = target.value;
var fileName = name.substring(name.lastIndexOf(".") + 1).toLowerCase();
if(fileName != "jpg" && fileName != "jpeg" && fileName != "pdf" && fileName != "png" && fileName != "dwg" && fileName != "gif") {
alert("请选择图片格式文件上传(jpg,png,gif,dwg,pdf,gif等)!");
target.value = "";
return
}
}