设为首页 收藏本站
查看: 756|回复: 0

[经验分享] 使用apache.commons.fileupload等进行文件上传

[复制链接]

尚未签到

发表于 2017-1-11 10:03:37 | 显示全部楼层 |阅读模式

表单里有上传文件


  url:http://wanglizhuang.javaeye.com/blog/466524

文章分类:Web前端 关键字: 上传文件和获取表单值
Java代码 http://wanglizhuang.javaeye.com/images/icon_copy.gif





  • 在servlet里的代码如下:



在servlet里的代码如下:
Java代码 http://wanglizhuang.javaeye.com/images/icon_copy.gif





  • String[]string={"title","type","content"};//表单里其他内容的name

  • Stringfilename=FileSave.save(request,response,string);//保存文件获取保存的文件名称

  • map=FileSave.map;//获取值



String[] string = { "title", "type", "content"};//表单里其他内容的name
String filename = FileSave.save(request, response, string); // 保存文件获取保存的文件名称
map = FileSave.map;//获取值
  下面是公共类:

Java代码 http://wanglizhuang.javaeye.com/images/icon_copy.gif





  • packagecn.com.crystalnet.common;


  • importjava.io.File;

  • importjava.io.IOException;

  • importjava.io.PrintWriter;

  • importjava.io.UnsupportedEncodingException;

  • importjava.util.HashMap;

  • importjava.util.Iterator;

  • importjava.util.List;

  • importjava.util.Map;


  • importjavax.servlet.http.HttpServletRequest;

  • importjavax.servlet.http.HttpServletResponse;


  • importorg.apache.commons.fileupload.FileItem;

  • importorg.apache.commons.fileupload.FileUploadException;

  • importorg.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;

  • importorg.apache.commons.fileupload.disk.DiskFileItemFactory;

  • importorg.apache.commons.fileupload.servlet.ServletFileUpload;

  • /**
  • *title:处理文件上传
  • *@author王立壮
  • *
  • */


  • publicclassFileSave{


  • publicstaticMapmap=null;


  • publicstaticStringsave(HttpServletRequestrequest,HttpServletResponseresponse,String[]paramName){


  • Stringu_name=null;


  • map=newHashMap();


  • finallongMAX_SIZE=3*1024*1024;//设置上传文件最大为3M

  • //允许上传的文件格式的列表

  • finalString[]allowedExt=newString[]{"gif","jpg","png","word","excel","txt","zip","ppt","pdf"};

  • response.setContentType("text/html");

  • //设置字符编码为UTF-8,这样支持汉字显示

  • response.setCharacterEncoding("UTF-8");


  • //实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload

  • DiskFileItemFactorydfif=newDiskFileItemFactory();

  • dfif.setSizeThreshold(4096);//设置上传文件时用于临时存放文件的内存大小,这里是4K.多于的部分将临时存在硬盘

  • dfif.setRepository(newFile(request.getRealPath("/")

  • +"ImagesUploadTemp"));//设置存放临时文件的目录,web根目录下的ImagesUploadTemp目录


  • //用以上工厂实例化上传组件

  • ServletFileUploadsfu=newServletFileUpload(dfif);

  • //设置最大上传尺寸
  • sfu.setSizeMax(MAX_SIZE);


  • PrintWriterout=null;

  • try{
  • out=response.getWriter();

  • }catch(IOExceptione1){

  • //TODOAuto-generatedcatchblock
  • e1.printStackTrace();
  • }

  • //从request得到所有上传域的列表

  • ListfileList=null;


  • try{
  • fileList=sfu.parseRequest(request);


  • if(fileList!=null){

  • for(Iteratoritr=fileList.iterator();itr.hasNext();){
  • FileItemfileItem=(FileItem)itr.next();

  • for(inti=0;i<paramName.length;i++){

  • if(fileItem.getFieldName().equalsIgnoreCase(
  • paramName)){

  • map.put(fileItem.getFieldName(),newString(fileItem.getString().getBytes("ISO8859-1"),"UTF-8"));//中文转码
  • }
  • }
  • }
  • }

  • System.out.println(fileList.size());

  • }catch(FileUploadExceptione){//处理文件尺寸过大异常

  • if(einstanceofSizeLimitExceededException){

  • out.println("文件尺寸超过规定大小:"+MAX_SIZE+"字节<p/>");

  • out.println("<ahref=/"UserCenter.jsp/"target=/"_top/">返回</a>");

  • }
  • e.printStackTrace();

  • }catch(UnsupportedEncodingExceptione){

  • //TODOAuto-generatedcatchblock
  • e.printStackTrace();
  • }

  • //没有文件上传

  • if(fileList==null||fileList.size()==0){

  • out.println("请选择上传文件<p/>");

  • out.println("<ahref=/"UserCenter.jsp/"target=/"_top/">返回</a>");

  • }

  • //得到所有上传的文件
  • IteratorfileItr=fileList.iterator();

  • //循环处理所有文件


  • while(fileItr.hasNext()){

  • FileItemfileItem=null;

  • Stringpath=null;

  • longsize=0;

  • //得到当前文件
  • fileItem=(FileItem)fileItr.next();

  • //忽略简单form字段而不是上传域的文件域(<inputtype="text"/>等)

  • if(fileItem==null||fileItem.isFormField()){

  • continue;
  • }

  • //得到文件的完整路径
  • path=fileItem.getName();

  • //得到文件的大小
  • size=fileItem.getSize();

  • if("".equals(path)||size==0){

  • out.println("请选择上传文件<p/>");

  • out.println("<ahref=/"UserCenter.jsp/"target=/"_top/">返回</a>");

  • break;

  • }


  • //得到去除路径的文件名

  • Stringt_name=path.substring(path.lastIndexOf("//")+1);

  • //得到文件的扩展名(无扩展名时将得到全名)

  • Stringt_ext=t_name.substring(t_name.lastIndexOf(".")+1);

  • //拒绝接受规定文件格式之外的文件类型

  • intallowFlag=0;

  • intallowedExtCount=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]

  • +"&nbsp;&nbsp;&nbsp;");
  • out

  • .println("<p/><ahref=/"UserCenter.jsp/"target=/"_top/">返回</a>");

  • }


  • longnow=System.currentTimeMillis();

  • //根据系统时间生成上传后保存的文件名
  • Stringprefix=String.valueOf(now);

  • //保存的最终文件完整路径,保存在web根目录下的ImagesUploaded目录下

  • u_name=request.getRealPath("/")+"Back//mailUpload//"

  • +prefix+"."+t_ext;

  • try{

  • //保存文件

  • fileItem.write(newFile(u_name));

  • u_name="mailUpload/"+prefix+"."+t_ext;

  • }catch(Exceptione){
  • e.printStackTrace();
  • }
  • }



  • returnu_name;
  • }

  • }



package cn.com.crystalnet.common;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
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;
/**
* title:处理文件上传
* @author 王立壮
*
*/
public class FileSave {
public static Map map = null;
public static String save(HttpServletRequest request, HttpServletResponse response,String[] paramName) {
String u_name = null;
map = new HashMap();
final long MAX_SIZE = 3 * 1024 * 1024;// 设置上传文件最大为 3M
// 允许上传的文件格式的列表
final String[] allowedExt = new String[] { "gif","jpg","png","word","excel","txt","zip","ppt","pdf"  };
response.setContentType("text/html");
// 设置字符编码为UTF-8, 这样支持汉字显示
response.setCharacterEncoding("UTF-8");
// 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload
DiskFileItemFactory dfif = new DiskFileItemFactory();
dfif.setSizeThreshold(4096);// 设置上传文件时用于临时存放文件的内存大小,这里是4K.多于的部分将临时存在硬盘
dfif.setRepository(new File(request.getRealPath("/")
+ "ImagesUploadTemp"));// 设置存放临时文件的目录,web根目录下的ImagesUploadTemp目录
// 用以上工厂实例化上传组件
ServletFileUpload sfu = new ServletFileUpload(dfif);
// 设置最大上传尺寸
sfu.setSizeMax(MAX_SIZE);
PrintWriter out = null;
try {
out = response.getWriter();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// 从request得到 所有 上传域的列表
List fileList = null;
try {
fileList = sfu.parseRequest(request);
if (fileList != null) {
for (Iterator itr = fileList.iterator(); itr.hasNext();) {
FileItem fileItem = (FileItem) itr.next();
for (int i = 0; i < paramName.length; i++) {
if (fileItem.getFieldName().equalsIgnoreCase(
paramName)) {
map.put(fileItem.getFieldName(), new String(fileItem.getString().getBytes("ISO8859-1"),"UTF-8"));// 中文转码
}
}
}
}
System.out.println(fileList.size());
} catch (FileUploadException e) {// 处理文件尺寸过大异常
if (e instanceof SizeLimitExceededException) {
out.println("文件尺寸超过规定大小:" + MAX_SIZE + "字节<p />");
out.println("<a href=/"UserCenter.jsp/" target=/"_top/">返回</a>");
}
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 没有文件上传
if (fileList == null || fileList.size() == 0) {
out.println("请选择上传文件<p />");
out.println("<a href=/"UserCenter.jsp/" target=/"_top/">返回</a>");
}
// 得到所有上传的文件
Iterator fileItr = fileList.iterator();
// 循环处理所有文件
while (fileItr.hasNext()) {
FileItem fileItem = null;
String path = null;
long size = 0;
// 得到当前文件
fileItem = (FileItem) fileItr.next();
// 忽略简单form字段而不是上传域的文件域(<input type="text" />等)
if (fileItem == null || fileItem.isFormField()) {
continue;
}
// 得到文件的完整路径
path = fileItem.getName();
// 得到文件的大小
size = fileItem.getSize();
if ("".equals(path) || size == 0) {
out.println("请选择上传文件<p />");
out.println("<a href=/"UserCenter.jsp/" target=/"_top/">返回</a>");
break;
}
// 得到去除路径的文件名
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]
+ "&nbsp;&nbsp;&nbsp;");
out
.println("<p /><a href=/"UserCenter.jsp/" target=/"_top/">返回</a>");
}
long now = System.currentTimeMillis();
// 根据系统时间生成上传后保存的文件名
String prefix = String.valueOf(now);
// 保存的最终文件完整路径,保存在web根目录下的ImagesUploaded目录下
u_name = request.getRealPath("/") + "Back//mailUpload//"
+ prefix + "." + t_ext;
try {
// 保存文件
fileItem.write(new File(u_name));
u_name = "mailUpload/"+ prefix + "." + t_ext;
} catch (Exception e) {
e.printStackTrace();
}
}

return u_name;
}
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-326878-1-1.html 上篇帖子: Apache FTPClient操作“卡死”问题的分析和解决 下篇帖子: Apache 2 mod_jk tomcat 5 双向SSL认证传递证书信息
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表