JavaWeb实现文件上传功能详解
这篇文章主要介绍了JavaWeb实现文件上传功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
文件上传功能的实现
在大多数网站中,我们都可以看见文件上传和下载功能的实现,今天我们就文件上传做一个详细的总结
实现步骤:
1、新建一个JSP页面:表单必须设置:enctype="multipart/form-data"参数 upload.jsp:
1 2 3 4 5 | < form action = "" method = "post" enctype = "multipart/form-data" > <!--accept=".txt"标签用来确定上传的文件默认类型--> 请选择您要上传的文件:< input type = "file" name = "fileName" accept = ".txt" /> < br /> 确认上传?< input type = "submit" value = "确认" />< input type = "reset" value = "重选" /> </ form > |
2、编写后端功能Servlet代码:
UploadFile.java:
具体实现思路:
--------1、设置编码方式为utf-8,获取字符流
--------2、创建DiskFileItemFactory工厂类对象,将文件封装成单独的FileItem对象
--------3、设置文件缓存目录
--------4、加载文件缓存目录,创建ServletFileUpload对象
--------5、设置文件编码为utf-8
--------6、解析request请求,得到上传文件的FileItem对象,得到的也就是所有的表单name
--------7、遍历表单name集合,判断哪一些是普通字段和文件字段,进行区分
--------8、得到所上传的文件路径名
--------9、截取文件名
--------10、设置上传的目标文件夹路径
--------11、通过字节流进行文件的对拷
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1、设置编码方式为utf-8,获取字符流 request.setCharacterEncoding( "utf-8" ); response.setContentType( "text/html;charset=utf-8" ); PrintWriter write = response.getWriter(); //2、创建DiskFileItemFactory工厂类对象,将文件封装成单独的FileItem对象 DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory(); //3、设置文件缓存目录 File file = new File( "C:\\Cache" ); if (!file.exists()) { //如果文件不存在,就创建一个文件 file.mkdirs(); } diskFileItemFactory.setRepository(file); //加载文件缓存目录 //4、创建ServletFileUpload对象 ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory); //5、设置文件编码为utf-8 fileUpload.setHeaderEncoding( "utf-8" ); //6、解析request请求,得到上传文件的FileItem对象,得到的也就是所有的表单name --->比如:这里只有一个name="fileName" 拿到的就是这个集合 List<FileItem> fileItems = null ; try { fileItems = fileUpload.parseRequest(request); } catch (FileUploadException e) { e.printStackTrace(); } //8、遍历集合 for (FileItem fileItem:fileItems) { //文本域 //判断是否为普通字段 if (fileItem.isFormField()) { //得到字段名、字段值 String name = fileItem.getFieldName(); // } //为文件域 else { //9、得到所上传的文件路径名 String fileName = fileItem.getName(); //10、截取文件名 String fiString = fileName.substring(fileName.lastIndexOf( "\\" )+ 1 ); //11、设置上传的目标文件夹路径 File filedir = new File( "C:\\NewFile" ); if (!filedir.exists()) { filedir.mkdir(); } // System.out.println(user.getUserName()); File filepath = new File(filedir+ "\\" +fiString); // System.out.println(fiString); if (!filepath.exists()) { filepath.createNewFile(); } //获得文件上传流 InputStream in = fileItem.getInputStream(); //使用FileOutStream打开服务器端的上传文件 FileOutputStream out = new FileOutputStream(filepath); //流的对拷 byte [] bb = new byte [ 1024 ]; int len ; while ((len= in.read(bb))> 0 ) { out.write(bb, 0 , len); // out.close(); // in.close(); fileItem.delete(); //删除临时文件 } write.println( "文件上传成功<br/>" ); } } } |
以上就是本文的全部内容,希望对大家的学习有所帮助
原文链接:https://blog.csdn.net/Mr_C_python/article/details/94135007