侧边栏壁纸
博主头像
coydone博主等级

记录学习,分享生活的个人站点

  • 累计撰写 306 篇文章
  • 累计创建 51 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

文件上传下载案例

coydone
2022-02-09 / 0 评论 / 0 点赞 / 329 阅读 / 4,147 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-04-09,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

上传jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Insert title here</title>
    </head>
    <body>
        <div style="width: 500px;margin: 0px auto;">
            <h3 style="text-align: center;">文件上传演示</h3>
            <form method="POST" enctype="multipart/form-data" action="/ch25/upload.do">
                选择文件: <input type="file" name="upfile"><br/>
                文件说明:<input type="text" name="note">&nbsp;
                <input type="submit" value="文件上传">
            </form>
        </div>
    </body>
</html>

上传文件servlet

public class FileUploadServlet extends HttpServlet {
    privatestaticfinallongserialVersionUID = 1L;
    protectedvoid doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        //1、检查是否是做文件上传的功能
        if(!ServletFileUpload.isMultipartContent(request)){
            //提示用户不能采用该内容类型进行文件的上传
            response.getWriter().print("表单内容的格式不正确,不能做文件上传");
            return;
        }else{
            try {
                DiskFileItemFactory factory=new DiskFileItemFactory();
                //设置内存临界值 - 超过后将产生临时文件并存储于临时目录中
                factory.setSizeThreshold(1024*1024*3);
                //设置临时文件夹
                factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
                //围绕ServletFileUpload对象来编码
                ServletFileUpload upload=new ServletFileUpload(factory);
                //设置上传文件的最大值
                upload.setFileSizeMax(1024* 1024*40);
                //设置上传内容的的最大值,包括上传的文件(上传域)和普通表单域
                upload.setSizeMax(1024*1024*50);
                //设置中文的处理
                upload.setHeaderEncoding("UTF-8");
                //所有表单中的元素input type text/password/checkbox等都会在后台被封装成一个一个的FileItem
                List<FileItem>list=upload.parseRequest(request);
                //将所有的list项进行迭代循环
                Iterator<FileItem>ir=list.iterator();
                while(ir.hasNext()){
                    //循环获得每个FileItem
                    FileItem item=ir.next();
                    //判断每个FileItem是普通的表单元素还是上传的文件域元素
                    if(item.isFormField()){//普通表单域元素
                        String note=item.getString();
                        System.out.println("普通表单元素的值:"+note);
                    }else{//上传文件域元素
                        //获得上传的文件名
                        String filename=item.getName();
                        //此时上传需要要到服务器的文件夹的地址
                        String filePath=getServletContext().getRealPath("/")+"upload";
                        //创建上传文件夹
                        File file=new File(filePath);
                        if(!file.exists()){
                            file.mkdirs();
                        }
                        //创建输入流和输出流
                        File uploadFile=new File(file, filename);
                        InputStream is=item.getInputStream();
                        OutputStream os=new FileOutputStream(uploadFile);
                        //边读边写
                        byte[] buffer=newbyte[1024];
                        intlen=-1;
                        while(-1!=(len=is.read(buffer, 0, buffer.length))){
                            os.write(buffer, 0, len);
                            os.flush();
                        }
                        os.close();
                        is.close();
                    }
                }
            } catch (FileUploadException e) {
                e.printStackTrace();
            }
        }

    }
    protectedvoid doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

下载jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Insert title here</title>
    </head>
    <body>
        <a href="/ch25/download.do?filename=${sessionScope.filename}">下载${sessionScope.filename}</a>
    </body>
</html>

下载文件servlet

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.setCharacterEncoding("UTF-8");
    //1、获得下载的文件名
    String filename=request.getParameter("filename");
    //2、获得要下载的文件对象
    String filePath=getServletContext().getRealPath("/")+"upload/"+filename;
    response.setHeader("content-disposition", "attachment;filename=" + URLDecoder.decode(filename));
    //3、创建File对象
    File file=new File(filePath);

    //边读边写
    InputStream is=new FileInputStream(file);
    OutputStream os=response.getOutputStream();
    //边读边写
    byte[] buffer=newbyte[1024];
    intlen=-1;
    while(-1!=(len=is.read(buffer, 0, buffer.length))){
        os.write(buffer, 0, len);
        os.flush();
    }
    os.close();
    is.close();
}
0

评论区