学习:javaWeb中文件的上传和下载

1.上传

本质就是将一台电脑中的文件根据网络协议通过io流传递到另外一台电脑(服务器)上

文件上传三个要素

1.表单提交方式为post
2.表单中需要文件上传项
3.enctype=multipart/form-data
<form action="${pageContext.request.contextPath}/upload" method="post" enctype="multipart/form-data">
    描述:<input type="text" name="desc"/><br>
    文件:<input type="file" name="file"/><br>
    <button type="submit">上传</button>
</form>

文件上传代码实现

需要两个架包

网址:https://mvnrepository.com/
jar包
jar包
代码演示:

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

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("文件上传");
        //创建磁盘文件项工厂
        DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
        //获取核心解析对象
        ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
        //解决中文乱码问题
        servletFileUpload.setHeaderEncoding("utf-8");

        try {
            List<FileItem> fileItems = servletFileUpload.parseRequest(req);
            String description = null;
            String fileName = null;
            for (FileItem fileItem : fileItems) {
                //获取每一个文件项 . 文字描述/文件数据
                //确定是否没有FileItem实例代表一个简单的表单字段
                //true如果实例表示一个简单的表格字段; false ,如果它代表一个上传的文件。
                if (fileItem.isFormField()){
                    //以字符串形式返回文件项的内容,使用指定的编码。 此方法使用get()来检索项的内容
                    description = fileItem.getString("utf-8");
                    System.out.println(description);
                } else {
                    InputStream inputStream = fileItem.getInputStream();
                    BufferedInputStream bis = new BufferedInputStream(inputStream);
                    String upload = req.getServletContext().getRealPath("upload");
                    System.out.println(upload);
                    File file = new File(upload);
                    //测试此抽象路径名表示的文件或目录是否存在。
                    if (! file.exists()){
                        file.mkdir();
                    }

                    fileName = System.currentTimeMillis() +"-" +fileItem.getName();

                    String path = upload + File.separator + fileName;
                    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(path));

                    int len=-1;
                    byte[] bys  = new byte[8192];
                    while ((len=bis.read(bys)) != -1){
                        bos.write(bys,0,len);
                    }
                    bis.close();
                    bos.close();
                }
            }
        } catch (FileUploadException e) {
            e.printStackTrace();
        }
    }
}

2.文件下载

本质就是将一台电脑(服务器)中的文件根据网络协议通过io流传递到另外一台电脑上。

代码演示

public class DownLoadServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //文件下载:将服务器中的文件 拷贝到  本地电脑中!!!!
        String fileName = request.getParameter("fileName");
        //1,设置媒体类型
        //文件存在本地电脑时,比如:a.txt
        //文件存在服务器中,就需要用到媒体类型:
        //获取下载文件对应的媒体类型
        String mimeType = request.getServletContext().getMimeType(fileName);
        System.out.println(mimeType);
        //告诉浏览器,服务器给的是什么类型的数据
        response.setContentType(mimeType);
        //2,设置下载窗口:Content-Disposition
        response.setHeader("Content-Disposition","attachement;filename="+fileName);
        //3,io流读写
        String inPath = request.getServletContext().getRealPath("upload") + File.separator + fileName;
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(inPath));
        ServletOutputStream outputStream = response.getOutputStream();
        BufferedOutputStream bos = new BufferedOutputStream(outputStream);
        int len = -1;
        byte[] bys = new byte[8192];
        while ((len = bis.read(bys)) != -1) {
            bos.write(bys,0,len);
        }
        bis.close();
        bos.close();
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值