栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

文件的上传和下载

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

文件的上传和下载

目录

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

1.文件上传,HTTP协议的说明

2.commons-fileupload.jar 常用API介绍说明

3.fileupload类库的使用

 2.文件下载


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

        1.要有一个form标签,method=post请求

        2.form标签的encType属性值必须为multipart/form-data值

        3.在form标签中使用input type=file添加上传文件

        4.编写服务器代码(Servlet程序)接收,处理上传的数据

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

1.文件上传,HTTP协议的说明

2.commons-fileupload.jar 常用API介绍说明

        1.commons-fileupload.jar 需要依赖 commons-io.jar 这个包,所以这两个包都要引入

                  commons-fileupload-1.4.jar

                   commons-io-2.11.0.jar      

        2.commons-fileupload.jar和commons-io.jar包中,我们常用的类有哪些?

                ServletFileUpload类,用于解析上传的数据

                FileItem类,表示每一个表单项.

                (1) boolean isMultipartContent(HttpServletRequest request)

                        判断当前上传的数据格式是否是多段的格式

                (2) public List parseRequest (HttpServletRequest request)

                        解析上传的数据

                (3) boolean FileItem.isFormField()

                        判断当前这个表单项,是否是普通的的表单项。还是上传的文件类型。

                        true 表示普通类型的表单项

                        false 表示上传的文件类型

                (4) String FileItem.getFieldName()

                        获取表单项的name属性值

                (5) String FileItem.getString()

                        获取当前表单项的值

                (6) Sting FileItem.getName

                        获取上传的文件名

                (7) viod FileItem.write( file )

                        将上传的文件写到参数file所指向的硬盘位置

3.fileupload类库的使用

代码演示:

 

        java:

package com.atshangma;


import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.List;

public class UploadServlet extends HttpServlet {
    
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      req.setCharacterEncoding("UTF-8");
        //1.先判断上传的数据是否多段数据(只有是多段数据,才是文件上传的)
        if (ServletFileUpload.isMultipartContent(req)){
            //创建FileItemFactory工厂实现类
            FileItemFactory fileItemFactory = new DiskFileItemFactory();
            //创建用于解析上传数据的工具类ServletFileUpload类
            ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
            //解析上传的数据,得到每一个表单项FileItem
            try {
                List list = servletFileUpload.parseRequest(req);
                //循环判断,每一个表单项,是普通类型,还是上传文件
                for (FileItem fileItem : list) {
                    if (fileItem.isFormField()){
                        //普通表单项
                        System.out.println("表单项的name属性值:" + fileItem.getFieldName());
                        //参数UTF-8,解决乱码问题
                        System.out.println("表单项的value属性值:" + fileItem.getString("UTF-8"));
                    }else {
                        //上传文件
                        System.out.println("表单项的name属性值:" + fileItem.getFieldName());
                        System.out.println("上传的文件名:" + fileItem.getName());

                        fileItem.write(new File("e:\"+fileItem.getName()));
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

        jsp:

<%--
  Created by IntelliJ IDEA.
  User: JAVASM
  Date: 2022/2/8
  Time: 16:07
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


用户名:
头像:

 2.文件下载

下载的常用API说明:

   

        resp.getOutputStream();

        servletContext.getResourceAsStream();    

        servletContext.getMimeType();

        resp.setContentType();



 代码演示:

 

 

 

package com.atshangma;

import org.apache.commons.io.IOUtils;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;


public class Download  extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.获取要下载的文件名
            String downloadFileName = "123.jpg";

        //2.读取要下载的文件内容(通过ServletContext对象读取)
            ServletContext servletContext = getServletContext();
            //获取要下载的文件类型
            String mimeType = servletContext.getMimeType("/file/" + downloadFileName);
            System.out.println("下载的文件类型:" + mimeType);

            
            InputStream resourceAsStream = servletContext.getResourceAsStream("/file/" + downloadFileName);
            //获取响应的输出流
            ServletOutputStream outputStream = resp.getOutputStream();

        //3.在回传前,通过响应头告诉客户端返回的数据类型
            resp.setContentType(mimeType);

        //4.还要告诉客户端收到的数据是用于下载使用(还是使用响应头)
            //Content-Disposition响应头,表示收到的数据怎么处理
            //attachment表示附件,表示下载使用
            //filename= 表示下载的文件名
            resp.setHeader("content-Disposition","attachment;filename=" + downloadFileName);

        //5.把下载的文件内容回传给客户端
        //读取输入流中全部的数据,复制给输出流,输出给客户端
        IOUtils.copy(resourceAsStream,outputStream);

    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/732167.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号