在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

HTML5 File API +JavaSevlet 实现文件上传实时更新进度

2016-12-20 13:14| 发布者: zhangjf| 查看: 497| 评论: 0

摘要: 参考网上资料总结,虽然有遇到很多坑,网上有,有些讲的不全也不仔细 package com.zs.web;import java.io.File;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.Se ...
参考网上资料总结,虽然有遇到很多坑,网上有,有些讲的不全也不仔细
  1. package com.zs.web;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.io.PrintWriter;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.annotation.WebServlet;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import javax.servlet.http.HttpSession;
  11. import org.apache.commons.fileupload.FileItem;
  12. import org.apache.commons.fileupload.ProgressListener;
  13. import org.apache.commons.fileupload.disk.DiskFileItemFactory;
  14. import org.apache.commons.fileupload.servlet.ServletFileUpload;
  15. import java.util.Iterator;
  16. import java.util.List;
  17. /**
  18. * Servlet implementation class FilesServlet
  19. */
  20. @WebServlet("/FilesServlet")
  21. public class FilesServlet extends HttpServlet {
  22. private static final long serialVersionUID = 1L;
  23. File tempPathFile;
  24. /**
  25. * @see HttpServlet#HttpServlet()
  26. */
  27. public FilesServlet() {
  28. super();
  29. // TODO Auto-generated constructor stub
  30. }
  31. @Override
  32. protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
  33. // TODO Auto-generated method stub
  34. String uploadPath =req.getSession().getServletContext().getRealPath("/file/");// 上传文件的目录
  35. //System.out.println(req.getSession().getServletContext().getRealPath("/"));
  36. HttpSession session = req.getSession();//使用request对象的getSession()获取session
  37. try {
  38. // Create a factory for disk-based file items
  39. DiskFileItemFactory factory = new DiskFileItemFactory();
  40. // Set factory constraints
  41. factory.setSizeThreshold(4096); // 设置缓冲区大小,这里是4kb
  42. factory.setRepository(tempPathFile);// 设置缓冲区目录
  43. // Create a new file upload handler
  44. ProgressListener progressListener = new ProgressListener(){
  45. public void update(long pBytesRead, long pContentLength, int pItems) {
  46. System.out.println("文件个数" + pItems);
  47. if (pContentLength == -1) {
  48. System.out.println("正上传:" + pBytesRead );
  49. } else {
  50. System.out.println("正上传" + pBytesRead + " of " + pContentLength
  51. + "");
  52. }
  53. }
  54. };
  55. ServletFileUpload upload = new ServletFileUpload(factory);
  56. upload.setProgressListener(progressListener);
  57. // Set overall request size constraint
  58. upload.setSizeMax(4194304); // 设置最大文件尺寸,这里是4MB
  59. List<FileItem> items = upload.parseRequest(req);// 得到所有的文件
  60. Iterator<FileItem> i = items.iterator();
  61. while (i.hasNext()) {
  62. FileItem fi = (FileItem) i.next();
  63. String fileName = fi.getName();
  64. if (fileName != null) {
  65. File fullFile = new File(new String(fi.getName().getBytes(), "utf-8")); // 解决文件名乱码问题
  66. File savedFile = new File(uploadPath, fullFile.getName());
  67. fi.write(savedFile);
  68. System.out.println(uploadPath);
  69. }
  70. }
  71. System.out.print("upload succeed");
  72. } catch (Exception e) {
  73. System.out.println("出现错误");
  74. }
  75. }
  76. }
复制代码

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-7-8 02:59

Copyright 2015-2025 djqfx

返回顶部