文件的上传和下载(超详细)

本文详细介绍了JavaWeb中文件上传下载的实现,包括HTTP协议的multipart/form-data形式,使用commons-fileupload.jar处理上传,以及解决文件名乱码问题的方案,如URLEncoder和BASE64编码。

文件的上传和下载,是非常常见的功能。很多的系统中,或者软件中都经常使用文件的上传和下载。 比如:QQ 头像,就使用了上传。 邮箱中也有附件的上传和下载功能。 OA 系统中审批有附件材料的上传。

1.文件的上传介绍(重点)

  1. 要有一个 form 标签,method=post 请求
  2. form 标签的 encType 属性值必须为 multipart/form-data
  3. 在 form 标签中使用 input type=file 添加上传的文件
  4. 编写服务器代码(这里使用Servlet 程序)接收,处理上传的数据。

encType=multipart/form-data 表示提交的数据,以多段(每一个表单项一个数据段)的形式进行拼 接,然后以二进制流的形式发送给服务器。

upload.jsp:

<body>
    <form action="http://172.25.11.14:8080/09_EL_JSTL/uploadServlet" method="post" enctype="multipart/form-data">
        用户名:<input type="text" name="username" /> <br>
        头像:<input type="file" name="photo" /> <br>
        <input type="submit" value="上传" />
    </form>
</body>

之后再写一个 UploadServlet.java(重写doPost方法) , 配置访问地址为 uploadServlet(这里全部省略)。

1.1 文件上传,HTTP 协议的说明

在这里插入图片描述

Content-Type 表示提交的数据类型

multipart/form-data 表示提交的数据,以多段(每一个表单项一个数据段)的形式进行拼接,然后以二进制流的形式发送给服务器。

boundary 表示每段数据的分隔符

----WebKitFormBoundaryfR6ijBPPqbdkIBkO是由浏览器每次都随机生成。它就是每段数据的分隔符。

下面以服务器不以流的形式接收为例:

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
   
        //以流的形式发给服务器,则只能以流的形式接收
        //以不是流的形式接收为例
        System.out.println(req.getParameter("username"));
        System.out.println(req.getParameter("photo"));
    }

在浏览器上传过文件之后,在idea的控制台输出了两个 null 。

下面以流的形式接收数据为例:

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
   
   
        ServletInputStream inputStream = req.getInputStream();
        //需要创建一个buff缓冲区
        byte[] buffer = new byte[1024000];
        int read = inputStream.read(buffer);
        System.out.println(new String(buffer,0,read));  //从0开始读了 read 个
    }
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值