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

文件的上传和下载,是非常常见的功能。很多的系统中,或者软件中都经常使用文件的上传和下载。 比如: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:


    
用户名:
头像:

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

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

文件的上传和下载(超详细)_第1张图片

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开始读了

你可能感兴趣的:(JavaWeb学习笔记,java,javaweb)