表单上传,普通字段和文件都可以接收,返回文件上传后的路径
public static String upload(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
String msg="";
String oidValue="";
File file = new File(filePath);
if (!file.exists()) {
System.out.println(filePath + "目录不存在,需要创建");
file.mkdirs();
}
/**
* 使用Apache文件上传组件处理文件上传步骤:
*
* */
//设置环境:创建一个DiskFileItemFactory工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
//设置上传文件的临时目录
// factory.setRepository(new File(tempFilePath));//设置文件缓存目录
// factory.setSizeThreshold(1024*1024);
//核心操作类:创建一个文件上传解析器。
ServletFileUpload upload = new ServletFileUpload(factory);
//解决上传"文件名"的中文乱码
upload.setHeaderEncoding("UTF-8");
//判断enctype:判断提交上来的数据是否是上传表单的数据
if(!ServletFileUpload.isMultipartContent(request)){
msg="不是上传文件,程序终止!";
/* request.setAttribute("msg",msg);
request.getRequestDispatcher("/jieguo.jsp").forward(
request, response);*/
return msg;
}
//使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单数据
try{
List<FileItem> items =upload.parseRequest(request);
for(FileItem item:items){
//如果fileitem中封装的是普通输入项的数据(输出名、值)
if(item.isFormField()){
String filedName = item.getFieldName();//普通输入项数据的名
//解决普通输入项的数据的中文乱码问题
oidValue = item.getString("UTF-8");//普通输入项的值
System.out.println("普通字段:"+filedName+"=="+oidValue);
}else{
//如果fileitem中封装的是上传文件,得到上传的文件名称,
String fileName = item.getName();//上传文件的名
System.out.println("文件名=="+fileName);
//多个文件上传输入框有空 的 异常处理
if(fileName==null||"".equals(fileName.trim())){ //去空格是否为空
continue;// 为空,跳过当次循环, 第一个没输入则跳过可以继续输入第二个
}
//注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如: c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt
//处理上传文件的文件名的路径,截取字符串只保留文件名部分。//截取留最后一个"\"之后,+1截取向右移一位("\a.txt"-->"a.txt")
fileName = fileName.substring(fileName.lastIndexOf("\\")+1);
int pos = fileName.lastIndexOf(".");
String str = fileName.substring(pos+1).toLowerCase();
//判断上传文件必须是zip或者是rar否则不允许上传
if ((!str.equals("doc"))&&(!str.equals("pdf"))&&(!str.equals("xls"))) {
msg="上传文件格式错误,请上传.doc(.pdf)(.xls)格式的文件";
return msg;
}
//拼接上传路径。存放路径+上传的文件名
savePath= filePath+File.separatorChar+fileName;
//构建输入输出流
InputStream in = item.getInputStream(); //获取item中的上传文件的输入流
File excelFile=new File(savePath);
if(!excelFile.exists()){
excelFile.createNewFile();
}
OutputStream out = new FileOutputStream(savePath); //创建一个文件输出流
//创建一个缓冲区
byte b[] = new byte[1024];
//判断输入流中的数据是否已经读完的标识
int len = -1;
//循环将输入流读入到缓冲区当中,(len=in.read(buffer))!=-1就表示in里面还有数据
while((len=in.read(b))!=-1){ //没数据了返回-1
//使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath+"\\"+filename)当中
out.write(b, 0, len);
}
//关闭流
out.flush();
out.close();
in.close();
//删除临时文件
item.delete();//删除处理文件上传时生成的临时文件
msg=savePath;
}
}
}catch(Exception e){
e.printStackTrace();
msg="服务器繁忙,请稍后再试!";
return msg;
}
return msg;
}