图片上传最终版本

  1. SERVLET
  2. packagecom.bjsxt.shopping.servlet;
  3. importjava.io.File;
  4. importjava.io.IOException;
  5. importjava.io.PrintWriter;
  6. importjava.util.Iterator;
  7. importjava.util.List;
  8. importjavax.servlet.ServletConfig;
  9. importjavax.servlet.ServletException;
  10. importjavax.servlet.http.HttpServlet;
  11. importjavax.servlet.http.HttpServletRequest;
  12. importjavax.servlet.http.HttpServletResponse;
  13. importorg.apache.commons.fileupload.FileItem;
  14. importorg.apache.commons.fileupload.FileUploadException;
  15. importorg.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
  16. importorg.apache.commons.fileupload.disk.DiskFileItemFactory;
  17. importorg.apache.commons.fileupload.servlet.ServletFileUpload;
  18. publicclassFileUploadServletextendsHttpServlet
  19. {
  20. //定义成员变量来记录上传的路径
  21. privateStringupLoadPath="";
  22. @Override
  23. //重写init(ServletConfigconfig)方法(不是voidinit())来取得WEB.XML的值
  24. publicvoidinit(ServletConfigconfig)throwsServletException
  25. {
  26. this.upLoadPath=config.getInitParameter("upload");
  27. }
  28. privatestaticfinallongserialVersionUID=1L;
  29. publicFileUploadServlet()
  30. {
  31. super();
  32. }
  33. protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException
  34. {
  35. this.doPost(request,response);
  36. }
  37. protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException
  38. {
  39. request.setCharacterEncoding("utf-8");
  40. intid=-1;
  41. finallongMAX_SIZE=300*1024*1024;//设置上传文件最大值
  42. //允许上传的文件格式的列表
  43. finalString[]allowedExt=newString[]{"jpg","jpeg","gif","txt","doc","mp3","wma","m4a","rar","zip"};
  44. response.setContentType("text/html");
  45. //设置字符编码为UTF-8,统一编码,处理出现乱码问题
  46. response.setCharacterEncoding("UTF-8");
  47. //实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload
  48. DiskFileItemFactorydfif=newDiskFileItemFactory();
  49. dfif.setSizeThreshold(4096);//设置上传文件时用于临时存放文件的内存大小,这里是4K.多于的部分将临时存在硬盘
  50. dfif.setRepository(newFile(request.getRealPath("/")+"ImagesUploadTemp"));//设置存放临时文件的目录,web根目录下的ImagesUploadTemp目录
  51. //用以上工厂实例化上传组件
  52. ServletFileUploadsfu=newServletFileUpload(dfif);
  53. //设置最大上传大小
  54. sfu.setSizeMax(MAX_SIZE);
  55. PrintWriterout=response.getWriter();
  56. //从request得到所有上传域的列表
  57. ListfileList=null;
  58. try
  59. {
  60. fileList=sfu.parseRequest(request);
  61. }catch(FileUploadExceptione)
  62. {//处理文件尺寸过大异常
  63. if(einstanceofSizeLimitExceededException)
  64. {
  65. out.println("文件尺寸超过规定大小:"+MAX_SIZE+"字节<p/>");
  66. out.println("<ahref=\"./admin/manager/productlist.jsp\">返回</a>");
  67. return;
  68. }
  69. e.printStackTrace();
  70. }
  71. //没有文件上传
  72. if(fileList==null||fileList.size()==0)
  73. {
  74. out.println("请选择上传文件<p/>");
  75. out.println("<ahref=\"./admin/manager/productlist.jsp\">返回</a>");
  76. return;
  77. }
  78. //得到所有上传的文件
  79. IteratorfileItr=fileList.iterator();
  80. //循环处理所有文件
  81. while(fileItr.hasNext())
  82. {
  83. FileItemfileItem=null;
  84. Stringpath=null;
  85. longsize=0;
  86. //得到当前文件
  87. fileItem=(FileItem)fileItr.next();
  88. //忽略简单form字段而不是上传域的文件域(<inputtype="text"/>等)
  89. if(fileItem!=null&&fileItem.isFormField())
  90. {
  91. if(fileItem.getFieldName().equals("id"))
  92. {
  93. id=Integer.parseInt(fileItem.getString());
  94. }
  95. }
  96. if(fileItem!=null&&!fileItem.isFormField())
  97. {
  98. //得到文件的完整路径
  99. path=fileItem.getName();
  100. //得到文件的大小
  101. size=fileItem.getSize();
  102. if("".equals(path)||size==0)
  103. {
  104. out.println("请选择上传文件<p/>");
  105. out.println("<ahref=\"./admin/manager/productlist.jsp\">返回</a>");
  106. return;
  107. }
  108. //得到去除路径的文件名
  109. Stringt_name=path.substring(path.lastIndexOf("\\")+1);
  110. //得到文件的扩展名(无扩展名时将得到全名)
  111. Stringt_ext=t_name.substring(t_name.lastIndexOf(".")+1);
  112. //拒绝接受规定文件格式之外的文件类型
  113. intallowFlag=0;
  114. intallowedExtCount=allowedExt.length;
  115. for(;allowFlag<allowedExtCount;allowFlag++)
  116. {
  117. if(allowedExt[allowFlag].equals(t_ext))
  118. break;
  119. }
  120. if(allowFlag==allowedExtCount)
  121. {
  122. out.println("请上传以下类型的文件<p/>");
  123. for(allowFlag=0;allowFlag<allowedExtCount;allowFlag++)
  124. out.println("*."+allowedExt[allowFlag]+"");
  125. out.println("<p/><ahref=\"./admin/manager/productlist.jsp\">返回</a>");
  126. return;
  127. }
  128. //longnow=System.currentTimeMillis();
  129. //根据系统时间生成上传后保存的文件名
  130. //Stringprefix=String.valueOf(now);
  131. //保存的最终文件完整路径,保存在web根目录下的ImagesUploaded目录下
  132. //Stringu_name=request.getRealPath("/")+"ImagesUploaded/"
  133. //+prefix+"."+t_ext;
  134. //Stringfilename=t_name;
  135. //System.out.println(t_name);
  136. try
  137. {
  138. //保存文件到C:\\upload目录下
  139. //统一将文件的扩展名改为 jpg 方便在页面中显示
  140. fileItem.write(newFile(upLoadPath+id+"."+"jpg"));
  141. //System.out.println(filename);
  142. out.println("文件上传成功.已保存到:"+upLoadPath+id+"."+"jpg"+"文件大小:"+size+"字节<p/>");
  143. out.println("<ahref=\"./admin/manager/productlist.jsp\">继续上传</a>");
  144. }catch(Exceptione)
  145. {
  146. e.printStackTrace();
  147. }
  148. }
  149. }
  150. }
  151. }
  152. WEB.XML中写入下面的内容:
  153. <servlet>
  154. <description>ThisisthedescriptionofmyJ2EEcomponent</description>
  155. <display-name>ThisisthedisplaynameofmyJ2EEcomponent</display-name>
  156. <servlet-name>FileUploadServlet</servlet-name>
  157. <servlet-class>com.bjsxt.shopping.servlet.FileUploadServlet</servlet-class>
  158. <init-param>
  159. <param-name>upload</param-name>
  160. <param-value>E:\\workspace\\MyProjest\\Shopping\\WebRoot\\images\\product\\</param-value>
  161. </init-param>
  162. </servlet>
  163. 其实最好的方法是增加一下属性文件,把要上传的路径写到该文件中,要上传时再从中读取这个路径
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值