您的位置:首页 > 编程语言 > Java开发

Java 多文件上传存储到不同的路径及某上传框中未选择上传文件的处理方法

2014-07-04 14:35 597 查看
近期写代码,要求多文件同时上传,但是每个文件要求上传到不同的路径去,研究了下,终于搞定,当然中间还遇到如果有某个上传框未选择文件出现的FileUploadException异常的处理办法(如果不管的话程序到这里就停止了,导致后边的文件无法继续上传)。

先看页面:



点击从目录选择就会出现浏览框选择文件,点击修改设置就会提交表单,当然这里使用的依旧是<input type="file">上传的,可能有些人看着感觉不像,原因是使用了js改了下,嘿嘿嘿

来上Java代码

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

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;
import org.apache.log4j.Logger;

public class UploadService {
private static final Logger logger = Logger.getLogger(UploadService.class);
private static String uploadPath = null;// 上传文件的目录
private static String tempPath = null; // 临时文件目录
private static File uploadFile = null;
private static File tempPathFile = null;
private static int sizeThreshold = 1024*2000;
private static int sizeMax = 50*1024*1024;
//初始化
static{
tempPath = "E://g";
tempPathFile = new File(tempPath);
if (!tempPathFile.exists()) {
tempPathFile.mkdirs();
}
}
public static boolean upload(HttpServletRequest request){
logger.info("uploading a file");
boolean flag = true;
//检查输入请求是否为multipart表单数据。
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
//若果是的话
if(isMultipart){
/**为该请求创建一个DiskFileItemFactory对象,通过它来解析请求。执行解析后,所有的表单项目都保存在一个List中。**/
try {
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(sizeThreshold); // 设置缓冲区大小,这里是4kb
factory.setRepository(tempPathFile);// 设置缓冲区目录
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");//解决文件乱码问题
upload.setSizeMax(sizeMax);// 设置最大文件尺寸
List<FileItem> items = upload.parseRequest(request);
Iterator<FileItem> itr = items.iterator();//所有的表单项
//保存文件
while (itr.hasNext()){
FileItem item = (FileItem) itr.next();//循环获得每个表单项
if (!item.isFormField()){//如果是文件类型
String name = item.getName();//获得文件名 包括路径啊
if(name!=null){
File fullFile=new File(item.getName());
//获取该上传流在表单中name的属性值<input type="file" name="mac">取出来就是mac
String nameA=item.getFieldName();
// !!!!!!!!! 达到根据不同的上传框上传到不同的路径,这里把存储路径直接弄成了和mac一样了,大家可以根据自己的要求随意改
uploadPath = "E://"+nameA;
uploadFile = new File(uploadPath);
if (!uploadFile.exists()) {
uploadFile.mkdirs();
}
// 如果某个上传框没有选择文件上传就直接执行else
if(!fullFile.getName().equals("")){
File savedFile=new File(uploadPath,fullFile.getName());
item.write(savedFile);
logger.info("upload a file for "+nameA+" successfully");
}else{
logger.info("no file upload for "+nameA);
}

}
}
}
}catch(FileNotFoundException e){
// 这个异常其实在上面已经解决了,估计没机会出现了,哈哈哈
logger.info("no file upload for ");
}
catch (FileUploadException e) {
flag = false;
logger.info("error occured when uploading a file ");
e.printStackTrace();
}catch (Exception e) {
flag = false;
logger.info("error occured!! when uploading a file ");
e.printStackTrace();
}
}else{
flag = false;
logger.info("the enctype must be multipart/form-data");
System.out.println("the enctype must be multipart/form-data");
}

return flag;
}

}



嗯嗯,看代码吧,奥妙都在里面了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐