使用smartupload.jar实现文件上传

1.将jar包添加到项目中:smartupload.jar

jar包在网上有很多,下一个就好了

2.准备上传的页面

  1. <form action="toUpload" method="post" enctype="multipart/form-data" >
  2. 书名:<input type="text" name="bookName"/><br>
  3. 图片:<input type="file" name="自定义名称"/><br>
  4. <input type="submit" value="提交"/>
  5. </form>

注:
(1)form标签中要添加enctype属性
(2)提交方式必须是post,因为get是有提交数据的大小限制的。

3.开始获取数据,保存文件

实例代码:

  1. public void upload(HttpServletRequest request, HttpServletResponse response)
  2. throws ServletException, IOException {
  3. try {
  4. //上传文件
  5. SmartUpload su=new SmartUpload();
  6. //获得pageContext对象
  7. JspFactory factory=JspFactory.getDefaultFactory();
  8. PageContext pagecontext=factory.getPageContext(this, request,response,null,false,1024,true);
  9. su.initialize(pagecontext);
  10. su.setCharset("utf-8");
  11. //实现文件数据的上传
  12. su.upload();
  13. File file = su.getFiles().getFile(0);
  14. //得到文件的基本信息
  15. String filename=file.getFileName();
  16. String type=file.getContentType();
  17. System.out.println("type="+type);
  18. String url="uploadfile/"+filename;
  19. //将上传文件保存到指定目录
  20. file.saveAs(url, SmartUpload.SAVE_VIRTUAL);
  21. request.setAttribute("filename",filename);
  22. String uname=su.getRequest().getParameter("uname");
  23. System.out.println("uname="+uname);
  24. request.getRequestDispatcher("success.jsp").forward(request, response);
  25. } catch (SmartUploadException e) {
  26. // TODO Auto-generated catch block
  27. e.printStackTrace();
  28. }
  29. }

注:
(1)此时如果表单中有其他数据时,不能通过request直接获取,需要通过SmartUpload对象获取
String name=su.getRequest().getParameter(“bookName”);
并且该代码要在SmartUpload操作完成后添加

(2)解决乱码:
new String(name.getBytes(“GBK”),”utf-8”)

注:斜杠方向:/
注意:
image.png
image.png
smartupload常用方法

属性名称 说明
public final void
initialize(PageContext pageContext)
执行上传和下载的初始化工作,必须实现
public void upload() 实现文件数据的上传,在initialize方法后执行
public int save(String pathName) 将全部上传文件保存到指定的目录下,并返回保存的文件个数
public void setAllowFilesList(String ExtList 指定允许上传的文件拓展名,接收一个拓展名列表,以逗号分隔
public void setTotalMaxFileSize(long filesize) 设定允许上传文件的总长度
public void setDeniedFilesList(String fileList) 指定了禁止上传的文件拓展名列表,每个拓展名之间以逗号分隔
public void setMaxFileSize(long filesize) 设定每个文件允许上传的最大长度