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();
}
}
}
}
}
详细解决方案
为什么小弟我用commons-fileuploa组件来实现上传文件但是一直抛错误说没有文件
热度:9189 发布时间:2016-04-10 23:13:04.0
相关解决方案
- commons-mail 发送邮件时怎么添加链接
- org.apache.http.client.HttpClient与org.apache.commons.httpclient.HttpClient的差别
- org.apache.commons.lang.exception.NestableRuntimeException
- commons-io的一个方法有关问题,请大家看看是不是BUG
- commons-fileupload求解释解决方案
- commons.betwixt xml和bean之间转换的有关问题
- commons.net FTPClient.listNames()获取文件无响应有关问题
- commons-daemon-1.0.13-bin-windows 登记成服务
- JSP [Class org.apache.commons.logging.LogFactory not found in import] ...
- 使用Apache Commons-email
- org.apache.commons.dbcp.BasicDataSource;
- 运用JasperReport时出错,java.lang.NoClassDefFoundError: org/apache/commons
- 用<html:file/> 资料上传功能实例和JSP Commons FileUpload 实例
- 用<html:file/> 文件下传功能实例和JSP Commons FileUpload 实例
- struts源代码阅览(Commons-Pool包)
- Java Web Application 另类的国际化形式gettext - commons for Java
- Struts2 commons-fileupload 在下传2M以下文件出现错误解决办法
- JSP 资料上传下载系列之二[Commons fileUpload]
- jsp+servlet文件下传(commons-fileupload)
- commons-beanutils组件里的copypropertyis跟cloneBean(原创)
- 施用jQuery+SWFUpload+Commons-FileUpload实现带进度条的上传
- The import org.apache.commons cannot be resolved,该怎么处理
- jar包摩擦 commons-lang3-3.1.jar 里没有NestableRuntimeException.class
- java.lang.ClassNotFoundException: org.apache.commons.codec.DecoderException 错误
- commons fileupload 取得绝对路径,该怎么解决
- jar包冲突 commons-lang3-3.1.jar 里没NestableRuntimeException.class
- 用 commons-email 组件 发邮件 出错 java.lang.ClassNotFoundException: javax.mail.internet
- commons dbutils使用出现的有关问题
- org.apache.commons.dbcp.SQLNestedException
- org.apache.commons.net.ftp 怎么获取服务器端所有文件的详细信息