java web实现文件上传下载

一、实现文件上传功能,首先需要两个jar包分别为common-fileupload,common-io。

1、上传前端页面代码为:

<form action="/upload" method="post" enctype="multipart/form-data">

    上传文件:<input name="upload" type="file"><br>
    <input type="submit" value="提交">
</form>

2、创建一个servlet用来编写后端代码:

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
        String path="E:/upload";
        File file=new File(path);
        //如果文件不存在,则创建
        if (!file.exists()){
            file.mkdirs();
        }
        //防止上传文件中文名字乱码
        req.setCharacterEncoding("utf-8");
        //创建磁盘工厂
        DiskFileItemFactory factory=new DiskFileItemFactory();
        //创建一个文件上传解析器
        ServletFileUpload upload=new ServletFileUpload(factory);
        List<FileItem> fileItems= null;
        try {
            //使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项
            fileItems = upload.parseRequest(req);
        } catch (FileUploadException e) {
            e.printStackTrace();
        }
        for (FileItem fileItem:fileItems){
            //如果fileitem中封装的是普通输入项的数据
            if (fileItem.isFormField()){

            }else {
                //获取文件名字
                String fileName = fileItem.getName();
                //防止上传文件名字重复
                String uuid= UUID.randomUUID().toString().replaceAll("-", "");
                fileName=uuid+"-"+fileName;
                try {
                    fileItem.write(new File(path,fileName));
                } catch (Exception e) {
                    e.printStackTrace();
                }
                fileItem.delete();
             req.setAttribute("success","上传成功");
             resp.sendRedirect("/success.jsp");

            }
        }

    }

二、实现文件下载功能:

1、文件下载前端代码:

<a href="/download">下载</a>

2、创建一个servlet用来编写后端代码:

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //文件所在的路径
        String path="E:/upload/";
        //文件的名字
        String fileName ="学习.jpg";
        // 防止中文下载文件名字乱码
        String downloadFileName = URLEncoder.encode(fileName,"UTF-8");
       //设置Content-Disposition
        resp.addHeader("Content-Disposition", "attachment;filename=" + downloadFileName);

        fileName=path+fileName;
        File file=new File(fileName);
        //读取文件
        FileInputStream in = new FileInputStream(file);
        OutputStream out = resp.getOutputStream();
        int len = 0;
        byte[] bytes = new byte[(int) file.length()];
        //写文件
        while (( len = in.read(bytes)) != -1) {
            out.write(bytes,0,len);

        }
        in.close();
        out.close();

    }
经验分享 程序员 微信小程序 职场和发展