首先需要commons-fileupload.jar
链接:https://pan.baidu.com/s/1LJH1E3oi8SEZHCQWjqBNDg
提取码:ykjx
然后就是代码了,我把他封装在一个方法里面
package util;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class upload {
/**
* 得到表单文件
* @param request
* @param response
* @param path 保存地址,为空时保存在==》 服务器地址data/项目名字/下面
* @return map 的数组==》名字是表单文字,value是值,特别的(data)里面保存的是上传文件的名字和状态。
* @throws ServletException
* @throws IOException
*/
public Map GetFill(HttpServletRequest request, HttpServletResponse response,String path) throws ServletException, IOException {
//设置语言
request.setCharacterEncoding("gbk");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
//设置字段
Map map=new HashMap<>();
// 判断enctype属性是否为multipart/form-data
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
System.out.println("判断"+isMultipart);
//设置路径
if(null==path) {
//得到项目名字
String xmname=request.getServletContext().getContextPath();
xmname=xmname.substring(1,xmname.length());
System.out.println("===项目名字"+xmname);
//设置地址
String pth = request.getSession()
.getServletContext().getRealPath("data/upload"+xmname+"/");
path = pth.replace("\\"+xmname, "");
}
System.out.println("保存地址=="+path);
if(isMultipart) {
// Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();
// 当上传文件太大时,因为虚拟机能使用的内存是有限的,所以此时要通过临时文件来实现上传文件的保存
// 此方法是设置是否使用临时文件的临界值(单位:字节)
//factory.setSizeThreshold(yourMaxMemorySize);
// 与上一个结合使用,设置临时文件的路径(绝对路径)
factory.setRepository(new File(path));
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置上传内容的大小限制(单位:字节)
//upload.setSizeMax(yourMaxRequestSize);
// Parse the request
try {
List<?> items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
//如果是普通表单字段
String name = item.getFieldName();
String value = item.getString();
System.out.println(name+"=得到==="+value);
map.put(name, value);
} else {
//如果是文件字段
String fieldName = item.getFieldName();
String fileName = item.getName();
long sizeInBytes = item.getSize();
System.out.println("=================="+item);
if(fieldName != null && sizeInBytes!= 0){
File newFile = new File(path + fileName);
if(newFile.exists()) {
MapPutFill(map,fileName+":文件存在");
item.delete();
}else {
try {
item.write(newFile);
MapPutFill(map,fileName+":保存成功");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
MapPutFill(map,fileName+":文件保存失败");
}
}
}else{
System.out.println("文件没有选择 或 文件内容为空");
MapPutFill(map,fileName+":文件没有选择 或 文件内容为空");
}
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("报错");
}
}
return map;
}
public void MapPutFill(Map map,String data ) {
if(map.get("data")==null) {
map.put("data", data);
}else {
String dString=map.get("data")+";"+data;
map.put("data", dString);
}
}
}
上传的文件默认我是保存在Tomact的服务器里面的一个文件夹下面,并且配置了服务器通过url访问的权限,不知道的可以看我的博客
有什么不足的希望多多交流。