在JSP中,创建ServletFileUpload对象的方法是
3个回答
2015-12-13 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
关注
展开全部
这个需要在jsp页面中引入import org.apache.commons.fileupload.*;
然后直接用里面的ServletFileUpload构造方法来实例化这个对象。
比如可以这么写:
ServletFileUpload upload = new ServletFileUpload(diskFactory);
try{
DiskFileItemFactory diskFactory = new DiskFileItemFactory();
// threshold 极限、临界值,即硬盘缓存 1M
diskFactory.setSizeThreshold(4 * 1024);
// repository 贮藏室,即临时文件目录
diskFactory.setRepository(new File(tempPath));
ServletFileUpload upload = new ServletFileUpload(diskFactory);
// 设置允许上传的最大文件大小 4M
upload.setSizeMax(4 * 1024 * 1024);
// 解析HTTP请求消息头
List fileItems = upload.parseRequest(req);
Iterator iter = fileItems.iterator();
while(iter.hasNext())
{
FileItem item = (FileItem)iter.next();
if(item.isFormField())
{
System.out.println("处理表单内容 ...");
processFormField(item, pw);
}else{
System.out.println("处理上传的文件 ...");
processUploadFile(item, pw);
}
}// end while()
pw.close();
}catch(Exception e){
System.out.println("使用 fileupload 包时发生异常 ...");
e.printStackTrace();
}// end try ... catch ...
然后直接用里面的ServletFileUpload构造方法来实例化这个对象。
比如可以这么写:
ServletFileUpload upload = new ServletFileUpload(diskFactory);
try{
DiskFileItemFactory diskFactory = new DiskFileItemFactory();
// threshold 极限、临界值,即硬盘缓存 1M
diskFactory.setSizeThreshold(4 * 1024);
// repository 贮藏室,即临时文件目录
diskFactory.setRepository(new File(tempPath));
ServletFileUpload upload = new ServletFileUpload(diskFactory);
// 设置允许上传的最大文件大小 4M
upload.setSizeMax(4 * 1024 * 1024);
// 解析HTTP请求消息头
List fileItems = upload.parseRequest(req);
Iterator iter = fileItems.iterator();
while(iter.hasNext())
{
FileItem item = (FileItem)iter.next();
if(item.isFormField())
{
System.out.println("处理表单内容 ...");
processFormField(item, pw);
}else{
System.out.println("处理上传的文件 ...");
processUploadFile(item, pw);
}
}// end while()
pw.close();
}catch(Exception e){
System.out.println("使用 fileupload 包时发生异常 ...");
e.printStackTrace();
}// end try ... catch ...
展开全部
boolean isMultipart = ServletFileUpload.isMultipartContent(request); //判断提交的表单是否是文件上传表单
if(isMultipart){
FileItemFactory fileItemFactory = new DiskFileItemFactory(); //获得磁盘文件条目工厂
ServletFileUpload upload = new ServletFileUpload(fileItemFactory); //高水平的API文件上传处理
//具体的获取上传信息,以及保存文件
try {
FileItem item = (FileItem) upload.parseRequest(request).get(0); //只有一个上传文件,取第一个即可
// String path1 = request.getRealPath("/data/userfile/image"); //此方法已经过时
// String path1 = session.getServletContext().getRealPath("/data/userfile/image"); //也可以这样写
String path1 = this.getServletContext().getRealPath("/data/userfile/image"); //文件保存路径
if(!item.isFormField()){
String value = item.getName(); //获取上传文件的文件名
int start = value.lastIndexOf("\\");
String fileName = value.substring(start+1); //文件名
String filetype = "jpg";
//过滤文件格式
if (fileName.length() > 0) {
int start1 = fileName.lastIndexOf('.');
if ((start1 >-1) && (start1 < (fileName.length() - 1))) {
String fileTemptype = fileName.substring(start1 + 1);
if("jpg".equals(fileTemptype) || "jpeg".equals(fileTemptype) || "png".equals(fileTemptype))
filetype = fileTemptype;
}
}
//重命名文件
String fileName1 = StringUtil.getNewFileNameString(5)+"."+filetype;
savedFileName = fileName1;
item.write(new File(path1,fileName1)); //用默认的方法将文件写入磁盘
}
backNews = "图像上传成功";
uploadFileBean.setUploadFileOk(true);
uploadFileBean.setSavedFileName(savedFileName);
} catch (Exception e) {
backNews = "图像上传失败";
}
}
我当时写的时候由于每次只上传一个文件,所以用了 FileItem item = (FileItem) upload.parseRequest(request).get(0);
如果你要一次上传多个文件的话,需要在此基础上稍作修改即可
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
C
原因没啥好讲的,因为Apache的Commons FileUpload组件就是这么设计的,ServletFileUpload可以实例化,但构造函数中需要传递一个FileItemFactory接口类型的对象(所以A, D不对)。
但是由于FileItemFactory是接口,不能用new实例化(所以B不对),需要用它的实现类DiskFileItemFactory进行实例化。
原因没啥好讲的,因为Apache的Commons FileUpload组件就是这么设计的,ServletFileUpload可以实例化,但构造函数中需要传递一个FileItemFactory接口类型的对象(所以A, D不对)。
但是由于FileItemFactory是接口,不能用new实例化(所以B不对),需要用它的实现类DiskFileItemFactory进行实例化。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询