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();

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值