关于Java Web文件上传与下载 >实现步骤

这篇博客详细介绍了如何在JavaWeb环境下实现文件上传和下载功能。首先,需要引入commons-fileupload和commons-io库。文件上传部分通过ServletFileUpload解析请求,处理上传的文件并保存到指定目录。下载文件时,根据用户代理判断编码方式,设置响应内容类型和附件头,然后读取并输出文件内容。

本篇博客主要讲述在Java Web环境下实现用户上传文件和用户在网页上下载文件的功能

1、准备工作:

在项目中导入两个jar包:① commons-fileupload.jar   ② commons-io.jar

下载地址:FileUpload – Home

下载地址:Commons IO – Commons IO Overview

文件上传代码实现:

/*
    文件上传
*/
@WebServlet("/upload")
public class UploadFileServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //防止上传的文件保存时乱码
        request.setCharacterEncoding("utf-8");
        if(ServletFileUpload.isMultipartContent(request)){
            //创建FileItemFactory实现类
            FileItemFactory fileItemFactory = new DiskFileItemFactory();
            //创建用于解析上传的数据的工具类ServletFileUpload
            ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
            //设置上传单个文件大小的最大值:2M
            servletFileUpload.setFileSizeMax(1024*1024*2);
            //获取每一个表单项数据
            try {
                //获取表单项
                List<FileItem> list = servletFileUpload.parseRequest(request);
                for(FileItem fileItem:list){
                    if(fileItem.isFormField()){
                        //普通表单项
                        //获取普通表单的Name属性值
                        String fieldName = fileItem.getFieldName();
                        //获取普通表单的内容
                        System.out.println(fileItem.getString());

                    }else{
                        //文件表单项

                        //在指定路径写入文件,getName()方法用于获取文件名
                        String path = request.getServletContext().getRealPath("/images");
                        File file = new File(path,fileItem.getName());
                        fileItem.write(file);
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        this.doPost(request,response);
    }
}

下载文件功能:

/*
    文件下载
 */
@WebServlet("/download")
public class DownLoadServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String user_agent = req.getHeader("user-agent");
        //定义需要下载的文件名称
        String fileName = "星空.jpg";
        //获取application域
        ServletContext servletContext = req.getServletContext();
        //获取输入流
        InputStream resourceAsStream = servletContext.getResourceAsStream("/images/"+fileName);
        //判断需要下载文件的MIME类型
        String mimeType = servletContext.getMimeType(fileName);
        //设置网页响应的MIME类型
        resp.setContentType(mimeType);
        //获取客户端(浏览器)的信息,包括浏览器名称、版本、协议等等
        String userAgent = req.getHeader("User-Agent");
        if (userAgent.contains("FireFox")){
            //客户端为火狐浏览器则用Base64编码格式
            BASE64Encoder base64Encoder = new BASE64Encoder();
            //设置网页处理数据的打开方式,以附件形式
            resp.setHeader("Content-Disposition","attachment;filename==?UTF-8?B?"+ base64Encoder.encode(fileName.getBytes("utf-8"))+"?=");
        }else{
            //不是火狐浏览器用URL编码格式
            try {
                //设置网页处理数据的打开方式,以附件形式
                resp.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(fileName,"utf-8"));
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }

        //将输入流数据复制到输出流
        IOUtils.copy(resourceAsStream,resp.getOutputStream());
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值