广州北大青鸟计算机职业培训学校
互联网技术培训、软件技术培训、大数据培训、云计算培训、数据分析培训信息网
当前位置:网站首页 > 软件教程 > Java技术 > 正文

惠州JavaWeb如何处理文件上传的Servlet?_北大青鸟IT学校

作者:邓华发布时间:2021-06-10分类:Java技术浏览:1238


导读:相信大家都很好奇JavaWeb如何处理文件上传的Servlet?那么接下来我们一起跟着惠州北大青鸟老师一起来学习一下JavaWeb如何处理文件上传的Servlet,希望对大家学习Java有帮助。

相信大家都很好奇JavaWeb如何处理文件上传的Servlet?那么接下来我们一起跟着惠州北大青鸟老师一起来学习一下JavaWeb如何处理文件上传的Servlet,希望对大家学习Java有帮助。

UploadHandleServlet的代码如下:

  1. package me.gacl.web.controller;



  2. import java.io.File;

  3. import java.io.FileOutputStream;

  4. import java.io.IOException;

  5. import java.io.InputStream;

  6. import java.util.List;

  7. import javax.servlet.ServletException;

  8. import javax.servlet.http.HttpServlet;

  9. import javax.servlet.http.HttpServletRequest;

  10. import javax.servlet.http.HttpServletResponse;

  11. import org.apache.commons.fileupload.FileItem;

  12. import org.apache.commons.fileupload.disk.DiskFileItemFactory;

  13. import org.apache.commons.fileupload.servlet.ServletFileUpload;

  14.  


  15. public class UploadHandleServlet extends HttpServlet {

  16.  


  17. public void doGet(HttpServletRequest request, HttpServletResponse response)

  18. throws ServletException, IOException {

  19. //得到上传文件的保存目录,将上传的文件存放于WEB-INF目录下,不允许外界直接访问,保证上传文件的安全

  20. String savePath = this.getServletContext().getRealPath("/WEB-INF/upload");

  21. File file = new File(savePath);

  22. //判断上传文件的保存目录是否存在

  23. if (!file.exists() && !file.isDirectory()) {

  24. System.out.println(savePath+"目录不存在,需要创建");

  25. //创建目录

  26. file.mkdir();

  27. }

  28. //消息提示

  29. String message = "";

  30. try{

  31. //使用Apache文件上传组件处理文件上传步骤:

  32. //1、创建一个DiskFileItemFactory工厂

  33. DiskFileItemFactory factory = new DiskFileItemFactory();

  34. //2、创建一个文件上传解析器

  35. ServletFileUpload upload = new ServletFileUpload(factory);

  36. //解决上传文件名的中文乱码

  37. upload.setHeaderEncoding("UTF-8"); 

  38. //3、判断提交上来的数据是否是上传表单的数据

  39. if(!ServletFileUpload.isMultipartContent(request)){

  40. //按照传统方式获取数据

  41. return;

  42. }

  43. //4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项

  44. List<FileItem> list = upload.parseRequest(request);

  45. for(FileItem item : list){

  46. //如果fileitem中封装的是普通输入项的数据

  47. if(item.isFormField()){

  48. String name = item.getFieldName();

  49. //解决普通输入项的数据的中文乱码问题

  50. String value = item.getString("UTF-8");

  51. //value = new String(value.getBytes("iso8859-1"),"UTF-8");

  52. System.out.println(name + "=" + value);

  53. }else{//如果fileitem中封装的是上传文件

  54. //得到上传的文件名称,

  55. String filename = item.getName();

  56. System.out.println(filename);

  57. if(filename==null || filename.trim().equals("")){

  58. continue;

  59. }

  60. //注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如: c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt

  61. //处理获取到的上传文件的文件名的路径部分,只保留文件名部分

  62. filename = filename.substring(filename.lastIndexOf("\\")+1);

  63. //获取item中的上传文件的输入流

  64. InputStream in = item.getInputStream();

  65. //创建一个文件输出流

  66. FileOutputStream out = new FileOutputStream(savePath + "\\" + filename);

  67. //创建一个缓冲区

  68. byte buffer[] = new byte[1024];

  69. //判断输入流中的数据是否已经读完的标识

  70. int len = 0;

  71. //循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据

  72. while((len=in.read(buffer))>0){

  73. //使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\" + filename)当中

  74. out.write(buffer, 0, len);

  75. }

  76. //关闭输入流

  77. in.close();

  78. //关闭输出流

  79. out.close();

  80. //删除处理文件上传时生成的临时文件

  81. item.delete();

  82. message = "文件上传成功!";

  83. }

  84. }

  85. }catch (Exception e) {

  86. message= "文件上传失败!";

  87. e.printStackTrace();

  88.  


  89. }

  90. request.setAttribute("message",message);

  91. request.getRequestDispatcher("/message.jsp").forward(request, response);

  92. }

  93.  


  94. public void doPost(HttpServletRequest request, HttpServletResponse response)

  95. throws ServletException, IOException {

  96.  


  97. doGet(request, response);

  98. }

  99. }

在Web.xml文件中注册UploadHandleServlet

  1. <servlet>

  2. <servlet-name>UploadHandleServlet</servlet-name>

  3. <servlet-class>me.gacl.web.controller.UploadHandleServlet</servlet-class>

  4. </servlet>

  5.  


  6. <servlet-mapping>

  7. <servlet-name>UploadHandleServlet</servlet-name>

  8. <url-pattern>/servlet/UploadHandleServlet</url-pattern>

  9. </servlet-mapping>

运行效果如下:


文件上传成功之后,上传的文件保存在了WEB-INF目录下的upload目录,如下图所示: 

更多Java资讯关注网站动态,或者来惠州北大青鸟新方舟校区了解一下。

java3.png

Java


标签:惠州计算机JAVA软件开发惠州计算机Java软件开发惠州计算机JAVA培训惠州计算机JAVA软件开发学校惠州计算机Java软件开发培训JAVAJava软件开发北大青鸟IT计算机学校北大青鸟IT软件学校北大青鸟IT学校


Java技术排行
标签列表
网站分类
文章归档
最近发表