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

基于java的文件上传与文件下载示例

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

基于java的文件上传与文件下载示例

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录
  • javaweb实现文件上传和下载
  • 一、文件上传(excel表格为例)
    • 1.代码示例
    • 2.运行截图
  • 二、文件下载(excel表格为例)
    • 1.代码示例
    • 2.运行截图
  • 总结


javaweb实现文件上传和下载

重点重点重点阿:IDE为idea,使用的服务器是tomcat。
还需要导入两个包通过(pom.xml):

        
			commons-fileupload
			commons-fileupload
			1.3.1
		
		
			commons-io
			commons-io
			2.4
		

或者手动加入(这两个包已经上传到本博客的资源下载文件里面):

如果后面的代码不能够运行:
请手动把这两个包加入到tomcat中的lib文件夹下面


提示:以下是本篇文章正文内容,下面案例可供参考

一、文件上传(excel表格为例)

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

1.代码示例

web前端代码如下(示例)registerList.jsp:

 

上传用户:

|

通过action=“…/upload.do”会自动调转到servlet中,这里为什么要用“…”返回上一层路径是因为我的registerList.jsp在register文件夹里面。

servlet中的代码如下:FileServlet.java

package edu.login.servlet.user;

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

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

public class FileServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        // 判断表单是否包含文件上传控件
        if (!ServletFileUpload.isMultipartContent(req)) { // 不包含文件上传控件,即普通表单
            return;
        }

        // 创建上传文件的保存路径:外界无法直接访问
        String uploadPath = this.getServletContext().getRealPath("/WEB-INF/classes/");//这里也可以设置为绝对路径
        File uploadFile = new File(uploadPath);
        makeDirIfNotExist(uploadFile);

        // 创建临时文件的保存路径
        String tmpPath = this.getServletContext().getRealPath("/WEB-INF/tmp");
        File tmpFile = new File(tmpPath);
        makeDirIfNotExist(tmpFile);

        // 1、创建DiskFileItemFactory对象
        DiskFileItemFactory factory = getDiskFileItemFactory(tmpFile);
        // 2、创建ServletFileUpload对象
        ServletFileUpload servletFileUpload = getServletFileUpload(factory);
        // 3、解析请求并处理文件传输
        String msg = "";
        try {
            msg = uploadParseRequest(req, servletFileUpload, uploadPath);
        } catch (FileUploadException e) {
            e.printStackTrace();
        }

        req.setAttribute("msg", msg);
        req.getRequestDispatcher("/print.jsp").forward(req, resp);
    }

    private String uploadParseRequest(HttpServletRequest httpServletRequest, ServletFileUpload servletFileUpload, String uploadPath)
            throws FileUploadException, IOException {
        String msg = "";

        // 解析前端请求,将每个表单项解析并封装成FileItem对象
        List fileItems = servletFileUpload.parseRequest(httpServletRequest);
        for (FileItem fileItem : fileItems) {
            // 判断表单项是否为上传文件
            if (fileItem.isFormField()) { // 普通文本
                String filedName = fileItem.getFieldName(); // 获取字段名:表单项name属性的值
                String value = fileItem.getString("UTF-8"); // FileItem对象中保存的数据流内容:即表单项为普通文本的输入值
                System.out.println(filedName + ":" + value);
            } else { // 上传文件
                // ------------------------1、处理文件------------------------
                
                String uploadFileName = fileItem.getName();// 上传文件名
                System.out.println("上传的文件名:" + uploadFileName);

                if (uploadFileName == null || uploadFileName.trim().equals("")) { // 文件名为空值或空
                    continue; // 进入下一轮循环,判断下一个FileItem对象
                }

                String fileExtName = uploadFileName.substring(uploadFileName.lastIndexOf(".") + 1); // 文件后缀名
                System.out.println("文件信息【文件名:" + uploadFileName + ",文件类型:" + fileExtName + "】");

                // 使用UUID保证文件名唯一
                String uuidPath = UUID.randomUUID().toString();

                // ------------------------2、处理路径------------------------

                // 存储路径:uploadPath
                String realPath = uploadPath; // 真实存在的路径
                // 给每个文件创建一个文件夹
                File realPathFile = new File(realPath);
                makeDirIfNotExist(realPathFile);

                // ------------------------3、文件传输------------------------

                // 获得输入流
                InputStream is = fileItem.getInputStream();
                // 获得输出流
                FileOutputStream fos = new FileOutputStream(realPathFile + "/" + uploadFileName);
                // 创建缓冲区
                byte[] buffer = new byte[1024];

                int len;
                while ((len = is.read(buffer)) > 0) {
                    fos.write(buffer, 0, len);
                }
                msg = "文件上传成功!";
                fileItem.delete(); // 上传成功,清除临时文件
                fos.close();
                is.close();
            }
        }
        return msg;
    }
    
    private ServletFileUpload getServletFileUpload(DiskFileItemFactory factory) {
        // ServletFileUpload servletFileUpload = new ServletFileUpload(factory); // 构造方法设置FileItemFactory

        ServletFileUpload servletFileUpload = new ServletFileUpload();
        servletFileUpload.setFileItemFactory(factory); // 设置FileItemFactory

        // ------------------------辅助功能------------------------
        // 监听文件上传进度
        servletFileUpload.setProgressListener(new ProgressListener() {
            
            @Override
            public void update(long pBytesRead, long pContentLength, int pItems) {
                String percentage = (int) (((double) pBytesRead / pContentLength) * 100) + "%";
                System.out.println("总大小:" + pContentLength + ",已上传:" + pBytesRead + "t" + percentage);
            }
        });
        // 处理乱码问题
        servletFileUpload.setHeaderEncoding("UTF-8");
        // 设置单个上传文件的最大值
        servletFileUpload.setFileSizeMax(1024 * 1024 * 10); // 10M
        // 设置总共上传文件的最大值
        servletFileUpload.setSizeMax(1024 * 1024 * 10); // 10M

        return servletFileUpload;
    }

    
    private DiskFileItemFactory getDiskFileItemFactory(File tmpFile) {
        // return new DiskFileItemFactory(1024 * 1024, tmpFile);

        DiskFileItemFactory factory = new DiskFileItemFactory();

        // ------------------------辅助功能------------------------
        factory.setSizeThreshold(1024 * 1024); // 1M(缓冲区大小):上传文件大于缓冲区大小时,fileupload组件将使用临时文件缓存上传文件
        factory.setRepository(tmpFile); // 临时文件夹
        return factory;
    }

    
    private void makeDirIfNotExist(File file) {
        if (!file.exists()) {
            file.mkdir();
        }
    }
}

String uploadPath = this.getServletContext().getRealPath(“/WEB-INF/classes/”);保存的的路径是服务器的tomcat路径

web.xml配置

    
        FileServlet
        edu.login.servlet.user.FileServlet
    
    
        FileServlet
        /upload.do
    

2.运行截图


二、文件下载(excel表格为例) 1.代码示例

web前端代码如下(示例)registerList.jsp:

 

下载模板

这里的action="…/download.do"这里点击后会调转到所配置的servlet中,为什么要用“…”是因为我的registerList.jsp在文件夹register中,而不是直接在web目录下面。

servlet中的代码如下:FileDownServlet.java

package edu.login.servlet.file;

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.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;

public class FileDownServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    }
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 1.获取下载文件的路径**
        String realPath="E:\maven\servlet-02\target\classes\data.xlsx";//这里用的是文件的绝对路径,也可以设置为相对路径
        System.out.println("下载文件路径"+realPath);
        // 2.下载的文件名
        String fileName="data.xlsx";
        // 3.设置让浏览器支持所下载的文件(设置中文编码utf-8格式)
        resp.setHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(fileName, "utf-8"));
        // 4.获取下载文件的输入流
        FileInputStream in= new FileInputStream(realPath);
        // 5.创建缓冲区
        int len=0;
        byte[] buffer=new byte[1024*3];
        // 6.获取OutputStream对象
        ServletOutputStream out=resp.getOutputStream();
        // 7.将FileOutputStream流写入到buffer缓冲区
        // 8.使用OutputStream将缓冲区中的数据输入到客户端
        while((len=in.read(buffer))>0){
            out.write(buffer,0,len);
        }
        in.close();
        out.close();
        req.getRequestDispatcher("/register/registerList.jsp").forward(req, resp);
    }
}

配置web.xml文件

    
        FileDownServlet
        edu.login.servlet.file.FileDownServlet
    
    
        FileDownServlet
        /download.do
    
2.运行截图


点击“下载模板”

总结

以上就是今天毕设所用到内容。

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

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

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