.JavaWeb文件上传

1.自定义上传

文件上传时的表单设计要符合文件提交的方式:

1.提交方式:post

2.表单中有文件上传的表单项:<input type="file"/>

3.指定表单类型:文件上传类型: enctype=“multipart/form-data”`

jsp上传页面:

  1. <%--
  2. Created by IntelliJ IDEA.
  3. User: cenyu
  4. Date: 16-12-20
  5. Time: 下午8:52
  6. To change this template use File | Settings | File Templates.
  7. --%>
  8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  9. <html>
  10. <head>
  11. <title>文件上传</title>
  12. </head>
  13. <body>
  14. <form action="${pageContext.request.contextPath}/upload" method="post" enctype="multipart/form-data">
  15. 用户名:<input type="text" name="username">
  16. 文件:<input type="file" name="file1"><br/>
  17. <input type="submit" value="提交上传">
  18. </form>
  19. </body>
  20. </html>

Servlet处理程序:

  1. package test;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.ServletInputStream;
  4. import javax.servlet.annotation.WebServlet;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import java.io.BufferedReader;
  9. import java.io.IOException;
  10. import java.io.InputStreamReader;
  11. /**
  12. * 手动处理文件上传
  13. * Created by cenyu on 16-12-20.
  14. */
  15. @WebServlet("/upload")
  16. public class uploadServlet extends HttpServlet {
  17. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  18. this.doGet(request,response);
  19. }
  20. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  21. /*
  22. request.getQueryString();//获取GET:username=Tom&pwd=888
  23. request.getInputStream();//获取POST:inputStream
  24. request.getParameter("");//使用这个可以不区分get和post
  25. */
  26. //获取表单(POST)数据
  27. ServletInputStream in = request.getInputStream();//此方法得到所有的提交信息,不仅仅只有内容
  28. //转换流
  29. InputStreamReader inReaser = new InputStreamReader(in);
  30. //缓冲流
  31. BufferedReader reader = new BufferedReader(inReaser);
  32. String str = null;
  33. while ((str=reader.readLine()) != null){
  34. System.out.println(str);
  35. }
  36. }
  37. }

提交测试文件:

  1. aaaaaaaaa
  2. bbbbbbbbb
  3. ccccccccc
  4. dddddddd

运行结果:

  1. -----------------------------468783950766433362585077246
  2. Content-Disposition: form-data; name="username"
  3. cenyu
  4. -----------------------------468783950766433362585077246
  5. Content-Disposition: form-data; name="file1"; filename="test.txt"
  6. Content-Type: text/plain
  7. aaaaaaaaa
  8. bbbbbbbbb
  9. ccccccccc
  10. dddddddd
  11. -----------------------------468783950766433362585077246--

2.FileUpload组件

FileUpload组件,也叫文件上传组件,是Apache提供的开源项目

组件使用方法:

1.下载,引入jar文件

引入commons-fileupload-1.2.1.jar

引入依赖包commons-io-1.4.jar

3.Api学习

文件上传组件API

FileItemFactory 文件上传工厂类(把每一个请求表单项封装为一个个FileItem对象)

fac.setRepository(repository);设置上传临时目录

ServletFileUpload 文件上传核心类,可以获取所有的FileItem对象

list pload.parseRequest(request);

Boolean isMultipartContent(request);判断表单类型,文件上传表单但会true

upload.setFileSizeMax(fileSizeMax);设置单个上传文件的最大值

upload.setSizeMax(sizeMax);设置总上传文件大总的最大值

upload.setHeaderEcoding("UTF-8");设置上传文件名的编码

FileItem 封装了普通表单项的值以及文件上传表单元素的值

item.getFiledName();获取上传表单元素的名称

item.getString();获取上传数据;

item.getString("UTF-8");获取上传数据,处理中文

item.getContentType();获取上传文件类型[文件上传项]

item.getInputStream();获取文件流[文件上传项]

item.getName();获取文件名[文件上传项]

item.write(file);把数据写到file文件

item.delete();删除临时文件

使用FileUpload组件来写上传方法的整体代码:

需求:

1.设置单个文件不能超过30M

2.设置总大小不能超过50M

3.上传目录,上传到项目资源目录下的upload目录

4.上传文件不能覆盖,解决上传文件名的同名问题

前端jsp页面中的代码没有改变,只需要看FileUploadServlet中的代码:

  1. package Upload;
  2. import org.apache.commons.fileupload.FileItem;
  3. import org.apache.commons.fileupload.FileUploadException;
  4. import org.apache.commons.fileupload.disk.DiskFileItemFactory;
  5. import org.apache.commons.fileupload.servlet.ServletFileUpload;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.annotation.WebServlet;
  8. import javax.servlet.http.HttpServlet;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11. import java.io.File;
  12. import java.io.IOException;
  13. import java.io.InputStream;
  14. import java.nio.file.attribute.FileTime;
  15. import java.util.List;
  16. import java.util.UUID;
  17. /**
  18. * 文件上传组件完整使用
  19. * Created by cenyu on 16-12-20.
  20. */
  21. @WebServlet("/load")
  22. public class FileUploadServlet extends HttpServlet {
  23. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  24. this.doGet(request,response);
  25. }
  26. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  27. //1.创建文件上传工厂类
  28. DiskFileItemFactory fac = new DiskFileItemFactory();
  29. //2.创建文件上传核心类对象
  30. ServletFileUpload upload = new ServletFileUpload(fac);
  31. //【一、设置单个文件最大30M】
  32. upload.setFileSizeMax(30*1024*1024);//30M
  33. //【二、设置总文件大小:50M】
  34. upload.setSizeMax(50*1024*1024); //50M
  35. //判断,当前表单是否为文件上传表单
  36. if (upload.isMultipartContent(request)){
  37. try {
  38. //3.把请求数据转换为FileItem对象的集合
  39. List<FileItem> list = upload.parseRequest(request);
  40. //遍历,得到每一个上传项
  41. for (FileItem item : list){
  42. //判断:是普通表单项,还是文件上传表单项
  43. if (item.isFormField()){
  44. //普通表单x
  45. String fieldName = item.getFieldName();//获取元素名称
  46. String value = item.getString("UTF-8"); //获取元素值
  47. System.out.println(fieldName+" : "+value);
  48. }else {
  49. //文件上传表单
  50. String name = item.getName(); //上传的文件名称
  51. /**
  52. * 【四、文件重名】
  53. * 对于不同的用户的test.txt文件,不希望覆盖,
  54. * 后台处理:给用户添加一个唯一标记!
  55. */
  56. //a.随机生成一个唯一标记
  57. String id = UUID.randomUUID().toString();
  58. //与文件名拼接
  59. name = id + name;
  60. //【三、上传到指定目录:获取上传目录路径】
  61. String realPath = getServletContext().getRealPath("/upload");
  62. //创建文件对象
  63. File file = new File(realPath, name);
  64. item.write(file);
  65. item.delete();
  66. }
  67. }
  68. } catch (Exception e) {
  69. e.printStackTrace();
  70. }
  71. }else {
  72. System.out.println("不处理!");
  73. }
  74. }
  75. }

.JavaWeb文件上传和FileUpload组件使用的更多相关文章

  1. 文件上传使用FileUpload组件进行代码实现

    使用FileUpload组件进行代码实现 实现步骤 1. 获取解析器工厂: DiskFileItemFactory 2. 获取解析器对象: ServletFileUpload 3. 解析request ...

  2. JavaWeb——文件上传和下载

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  3. JavaWeb 文件 上传 下载

    文件上传下载对于一个网站来说,重要性不言而喻.今天来分享一个JavaWeb方式实现的文件上传下载的小例子. 项目依赖 项目目录 工作流程 文件上传 表单处的设置 服务器端 上传功能的实现 upload ...

  4. 【Java】JavaWeb文件上传和下载

    文件上传和下载在web应用中非常普遍,要在jsp环境中实现文件上传功能是非常容易的,因为网上有许多用java开发的文件上传组件,本文以commons-fileupload组件为例,为jsp应用添加文件 ...

  5. JavaWeb文件上传和下载

    文件上传和下载在web应用中非常普遍,要在jsp环境中实现文件上传功能是非常容易的,因为网上有许多用java开发的文件上传组件,本文以commons-fileupload组件为例,为jsp应用添加文件 ...

  6. [原创]java WEB学习笔记49:文件上传基础,基于表单的文件上传,使用fileuoload 组件

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  7. java文件上传-使用apache-fileupload组件

    目前文件上传的(框架)组件:Apache----fileupload .Orialiy – COS – 2008() .Jsp-smart-upload – 200M. 用fileupload上传文件 ...

  8. JavaWeb 文件上传下载

    1. 文件上传下载概述 1.1. 什么是文件上传下载 所谓文件上传下载就是将本地文件上传到服务器端,从服务器端下载文件到本地的过程.例如目前网站需要上传头像.上传下载图片或网盘等功能都是利用文件上传下 ...

  9. 转载:JavaWeb 文件上传下载

    转自:https://www.cnblogs.com/aaron911/p/7797877.html 1. 文件上传下载概述 1.1. 什么是文件上传下载 所谓文件上传下载就是将本地文件上传到服务器端 ...

随机推荐

  1. ExtJS 4.2 评分组件

    上一文章是扩展ExtJS自带的Date组件.在这里将创建一个评分组件. 目录 1. 介绍 2. 示例 3. 资源下载 1. 介绍 代码参考的是 Sencha Touch 2上的一个RatingStar ...

  2. python程序生成平均脸

    简介 项目代码https://github.com/LiuRoy/pokerface 原文链接http://www.cnblogs.com/lrysjtu/p/5492547.html 写这个项目的本 ...

  3. 苹果强制使用HTTPS传输了怎么办?——关于HTTPS,APP开发者必须知道的事

    WeTest 导读 2017年1月1日起,苹果公司将强制使用HTTPS协议传输.本文通过对HTTPS基础原理和通信过程内容的讲解,介绍APP开发者在这个背景下的应对办法. 几周前,我们在<htt ...

  4. [.NET] C# 知识回顾 - Event 事件

    C# 知识回顾 - Event 事件 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6060297.html 序 昨天,通过<C# 知识回顾 - ...

  5. 【原创分享·微信支付】C# MVC 微信支付之微信模板消息推送

    微信支付之微信模板消息推送                    今天我要跟大家分享的是“模板消息”的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信生存的呀,所以他能不 ...

  6. angular2系列教程(七)Injectable、Promise、Interface、使用服务

    今天我们要讲的ng2的service这个概念,和ng1一样,service通常用于发送http请求,但其实你可以在里面封装任何你想封装的方法,有时候控制器之间的通讯也是依靠service来完成的,让我 ...

  7. 编写高质量代码:改善Java程序的151个建议(第6章:枚举和注解___建议88~92)

    建议88:用枚举实现工厂方法模式更简洁 工厂方法模式(Factory Method Pattern)是" 创建对象的接口,让子类决定实例化哪一个类,并使一个类的实例化延迟到其它子类" ...

  8. The Zen of Python

    Beautiful is better than ugly. 优美总比丑陋好Explicit is better than implicit. 直率总比含蓄好Simple is better than ...

  9. iOS之判断手机号码、邮箱格式是否正确

    //判断手机号码格式是否正确 + (BOOL)valiMobile:(NSString *)mobile{     mobile = [mobile stringByReplacingOccurren ...

  10. 第14章 Linux启动管理(2)_启动引导程序grub

    2. 启动引导程序grub 2.1 Grub配置文件 (1)grub中分区的表示 硬盘 分区 Linux设备文件名 Grub中设备文件名 第1块SCSI硬盘 第1个主分区 /dev/sda1 hd(0 ...