zoukankan      html  css  js  c++  java
  • 文件下载

    准备

    1. 要有一个form 标签,method=post 请求
    2. form 标签的encType 属性值必须为multipart/form-data 值
    3. 在form 标签中使用input type=file 添加上传的文件
    4. 编写服务器代码(Servlet 程序)接收,处理上传的数据。
    • encType=multipart/form-data 表示提交的数据,以多段(每一个表单项一个数据段)的形式进行拼接,然后以二进制流的形式发送给服务器

    文件上传的 http协议说明

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

    • commons-fileupload.jar 需要依赖commons-io.jar 这个包,所以两个包我们都要引入。
      • 第一步,就是需要导入两个jar 包:
        commons-fileupload-1.2.1.jar
        commons-io-1.4.jar
    • commons-fileupload.jar 和commons-io.jar 包中,我们常用的类有哪些?
    • ServletFileUpload 类,用于解析上传的数据。FileItem 类,表示每一个表单项。
      • boolean ServletFileUpload.isMultipartContent(HttpServletRequest request); 判断当前上传的数据格式是否是多段的格式。
      • public List parseRequest(HttpServletRequest request) 解析上传的数据
      • boolean FileItem.isFormField() 判断当前这个表单项,是否是普通的表单项。还是上传的文件类型。
        true 表示普通类型的表单项
        false 表示上传的文件类型
      • String FileItem.getFieldName() 获取表单项的name 属性值
      • String FileItem.getString() 获取当前表单项的值。
      • String FileItem.getName(); 获取上传的文件名
      • void FileItem.write( file ); 将上传的文件写到参数file 所指向抽硬盘位置。

    代码

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>$Title$</title>
    </head>
    <body>
    <form action="${pageContext.request.contextPath}/fileDownload" method="post"
          enctype="multipart/form-data">
        用户名:<input type="text" name="username"/> <br>
        头像:<input type="file" name="photo"> <br>
        <input type="submit" value="上传">
    </form>
    </body>
    </html>
    
    @WebServlet("/fileDownload")
    public class FileDownloadServlet extends HttpServlet {
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //1. 先判断上传的数据是否多段数据(只有是多端的数据,才是文件上传的)
            if (ServletFileUpload.isMultipartContent(request)) {
                //创建 FileItemFactory 工厂实现类
                FileItemFactory fileItemFactory = new DiskFileItemFactory();
                //创建用于解析上传数据的工具类 ServletFileUpload
                ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
                try {
                    //解析上传的数据,得到每一个表单项 FileItem
                    List<FileItem> list = servletFileUpload.parseRequest(request);
                    //循环判断,每一个表单是普通类型,还是上传的文件
                    for (FileItem e : list) {
                        //判断是是否是字段属性
                        if (e.isFormField()) {
                            //普通比表单项
                            System.out.println("表单项的 name属性值" + e.getFieldName());
                            //参数 utf-8.解决乱码问题
                            System.out.println("表单项的 value属性值" + e.getString("utf-8"));
                        } else {
                            //上传文件
                            System.out.println("表单项的 name属性值" + e.getFieldName());
                            System.out.println("上传文件名" + e.getName());
    
                            //使用 uuid进行随机文件名
                            String fileName = UUID.randomUUID() +
                                    //截取后缀
                                    e.getName().substring(e.getName().lastIndexOf("."));
                            System.out.println(fileName);
    
                            //- 把服务器保存到硬盘中
    //                        e.write(new File("D:\新建文件夹\" + fileName));
    
                            //- 把文件保存在项目的image文件夹中::::保存在idea配置的tomcat目录中
                            String path = request.getServletContext().getRealPath("/image");
                            System.out.println(path);
                            System.out.println(path + File.separator + fileName);
    
                            //- 使用这个FileItem 写入
                            e.write(new File(path));
                            //或者使用 apache.commons.io.IOUtils; 工具类写入
    //                        IOUtils.copy(e.getInputStream(), new FileOutputStream(fileName));
                        }
    
                    }
    
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
  • 相关阅读:
    工作的价值
    面对伤害该不该回击
    建议
    利用私有的API获得手机上所安装的所有应用信息(包括版本,名称,bundleID,类型)
    你必须知道的HTTP错误
    静态库制作
    MDM证书申请的流程
    IOS客户端实现RSA加密
    获得appstore里面app的最新的版本信息,进行版本更新
    C语言实现简单php自定义扩展
  • 原文地址:https://www.cnblogs.com/zk2020/p/15408703.html
Copyright © 2011-2022 走看看