当前位置:编程学习 > JAVA >>

为什么我用commons-fileuploa组件来实现上传文件但是一直抛异常说没有文件


import java.io.File;
import java.util.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;



@SuppressWarnings("serial")
public class UploadServlet extends HttpServlet{

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}

@SuppressWarnings({ "deprecation", "unchecked" })
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
final long MAX_SIZE = 10*1024*1024; //设置上传文件最大为10M
final String[] allowedExt = new String[]{"jpg","jpeg","gif","txt","doc","docx","mp3","wma","w4a","bmp","JPG"};
resp.setContentType("text/html");
//设置字符编码为UTF-8,这样支持汉字显示
resp.setCharacterEncoding("UTF-8");
//实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload
DiskFileItemFactory dfif = new DiskFileItemFactory();
//设置上传文件时用于临时存放文件的内存大小,这里是4K,多余部分将临时存在硬盘
dfif.setSizeThreshold(4096);
//设置存放临时文件的目录,web根目录下的ImagesUploadTemp
dfif.setRepository(new File(req.getRealPath("/")+"ImagesUploadTemp"));
//用以上工厂实例化上传组件
ServletFileUpload sfu = new ServletFileUpload(dfif);
//设置最大上传尺寸
sfu.setSizeMax(MAX_SIZE);
PrintWriter out = resp.getWriter();
//从req得到所有上传域的列表
List fileList = null;
try {
fileList = sfu.parseRequest(req);
}catch(FileUploadException e) { //处理文件尺寸过大异常
if(e instanceof SizeLimitExceededException) {
out.println("文件尺寸超过规定大小:" + MAX_SIZE + "字节</p>");
out.println("<a href=\"\\chap11\\fileupload.jsp\" target=\"_top\">返回</a>");
return;
}
//没有文件上传
if(fileList == null || fileList.size() == 0) {
out.println("请选择上传文件1</p>");
out.println("<a href=\"\\chap11\\fileupload.jsp\" target=\"_top\">返回</a>");
return;
}
//得到所有上传的文件
Iterator fileltr = fileList.iterator();
//循环处理所有文件
while(fileltr.hasNext()) {
FileItem fileitem = null;
String path = null;
long size = 0;
//得到当前文件
fileitem = (FileItem)fileltr.next();
//忽略简单form字段而不是上传域的文件域(<input type="text" />等)
if(fileitem == null || fileitem.isFormField()) {
continue;
}
//得到文件的完整路径
path = fileitem.getName();
size = fileitem.getSize();
if("".equals(path) || size == 0) {
out.println("请选择上传文件2</p>");
out.println("<a href=\"\\chap11\\fileupload.jsp\" target=\"_top\">返回</a>");
return;
}
//得到去除路径的文件名
String t_name = path.substring(path.lastIndexOf("\\")+1);
//得到文件的扩展名
String t_ext = t_name.substring(t_name.lastIndexOf(".")+1);
//拒绝接受规定文件格式之外的文件类型
int allowFlag = 0;
int allowedExtCount = allowedExt.length;
for(;allowFlag < allowedExtCount;allowFlag++) {
if(allowedExt[allowFlag].equals(t_ext)) {
break;
}
}
if(allowFlag == allowedExtCount) {
out.println("请上传以下类型的文件</p>");
for(allowFlag = 0; allowFlag < allowedExtCount ; allowFlag++) {
out.println("*." + allowedExt[allowFlag] + "   ");
}
out.println("<a href=\"\\chap11\\fileupload.jsp\" target=\"_top\">返回</a>");
return;
}
//保存的最终文件完整路径,保存在web根目录下的ImagesUploaded目录下
String u_name = req.getRealPath("/")+"upload/" + t_name;
try {
//保存文件
fileitem.write(new File(u_name));
out.println("文件上传成功.已保存为:" + t_name + "  文件大小" + size +
"字节<p/>");
out.println("<a href=\"\\chap11\\fileupload.jsp\" target=\"_top\">继续上传</a>");
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}

}

}



--------------------编程问答-------------------- 异常呢 --------------------编程问答-------------------- <p><p><a></a>
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,