在JSP中,创建ServletFileUpload对象的方法是

 我来答
千锋教育
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 ...
百度网友2374fe58
2015-10-10 · TA获得超过808个赞
知道小有建树答主
回答量:420
采纳率:100%
帮助的人:191万
展开全部
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);

如果你要一次上传多个文件的话,需要在此基础上稍作修改即可

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mikemelon2012
推荐于2018-03-02 · TA获得超过3633个赞
知道大有可为答主
回答量:938
采纳率:87%
帮助的人:373万
展开全部
C
原因没啥好讲的,因为Apache的Commons FileUpload组件就是这么设计的,ServletFileUpload可以实例化,但构造函数中需要传递一个FileItemFactory接口类型的对象(所以A, D不对)。
但是由于FileItemFactory是接口,不能用new实例化(所以B不对),需要用它的实现类DiskFileItemFactory进行实例化。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式