其他分享
首页 > 其他分享> > 文件下载

文件下载

作者:互联网

准备

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

文件上传的 http协议说明

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

代码

<%@ 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();
            }
        }
    }
}

标签:文件,单项,jar,commons,println,上传,下载,FileItem
来源: https://www.cnblogs.com/zk2020/p/15408703.html