文件上传

文件上传和下载的实质:文件的拷贝

文件上传:从本地拷贝到服务器磁盘上 客户端需要编写文件上传表单—->服务端需要编写代码接受上传的 文件
文件下载:从服务器磁盘上拷贝到本地磁盘 需要编写服务端的代码,客户端的下载的工作浏览器内核解决的

1.导包 文件上传包 和 io包
2.表单项需要修改 enctype=”multipart/form-data” 提交方式必须是post
3.servlet中
1)FileUpload工具中三个核心的对象
DiskFileItemFactory:磁盘文件项工厂–一些相关的配置的设置 缓存的大小 临时目录的位置
ServletFileUplaod:文件上传的一个核心类
FileItem:代表每一个表单项
这里写图片描述

2)文件上传的API的详解
(1) DiskFileItemFactory
设置缓存大小:factory.setSizeThreshold() 单位是字节
设置临时文件的目录:factory.setRepository(File)

(2) ServletFileUpload
判断是否是一个文件上传的表单:ServletFileUpload.isMultipartContent(request);
解析request获得表单项的集合:upload.parseRequest(request);
设置上传的文件名的编码方式:upload.setHeaderEncoding(“UTF-8”);

(3) FileItem
判断是否是普通表单项:item.isFormField();
获得表单的name属性值:item.getFieldName();
获得表单的value值:item.getString(“UTF-8”) — UTF-8表示获得中文时的编码
获得上传文件的名称:item.getName()
获得上传文件:item.getInputStream();
删除临时文件:item.delete();

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
 <form action="/file/fileservlet2" method="post" enctype="multipart/form-data">
 <input type="text" name="username">
 <input type="file" name="filename">
 <input type="submit"  value="tijiao">
 </form>
</body>
</html>

servlet
1.简单入门

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        try {
               //接受上传文件
            //1.创建磁盘文件项工厂
            DiskFileItemFactory factory = new DiskFileItemFactory();
            //创建文件上传核心类
            ServletFileUpload upload= new ServletFileUpload(factory);
            //解析request  获得文件项集合
        List<FileItem> parsrRequest=    upload.parseRequest( request);

        //遍历文件项集合
        for(FileItem item :parsrRequest){
            //判断是普通表单项还是文减上传项
            boolean formField = item.isFormField();//是否是普通表单项
            if(formField){
                //普通表单项
                String fieldName = item.getFieldName();
                   String fileValue = item.getString();
                   System.out.println(fieldName+"sss"+fileValue);
            }else{
                //文件上传项
                //获得上传文件的名称
                String fileName = item.getName();
                //获得文件上传的内容
                InputStream in = item.getInputStream();
                //将in中的数据上传到服务器zhong
                String Path = this.getServletContext().getRealPath("upload");
                FileOutputStream out = new FileOutputStream(Path+"/"+fileName);
                int len=0;
                byte[] buffer = new byte[1024];
                while((len=in.read(buffer))>0){
                    out.write(buffer, 0, len);
                    System.out.println("成功");
                }
                in.close();
                out.close();
            }
        }

正儿八经的代码

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         try {
        //创建磁盘文件项工厂
        //设置零时文件的大小  设置临时文件存储的位置
        String Path_temp = this.getServletContext().getRealPath("temp");
    DiskFileItemFactory factory = new DiskFileItemFactory(1024*1024, new File(Path_temp));
    //创建文件上传核心类对象
    ServletFileUpload  upload = new ServletFileUpload(factory);
    //设置上传文件的编码
    upload.setHeaderEncoding("UTF-8");
    boolean multipartContent = upload.isMultipartContent(request);//判断是否是文件上传表单

         if(multipartContent){
             //是文件上传表单  解析request 获得文件项集合

                List<FileItem> paseRequest = upload.parseRequest(request);

                if(paseRequest!=null){
                    for(FileItem item:paseRequest){
                        boolean formField = item.isFormField();//是否是普通表单项
                        if(formField){
                            String fieldName = item.getFieldName();
                            String fieldvalue = item.getString("UTF-8");//对普通表单项进行编码
                            //当表单是 enctype="multipart/form-data"时  request.getparameter会失效
                            System.out.println(fieldName+"   "+fieldvalue);

                        }else{
                             //文件上传项
                             String name = item.getName();//获得文件的名字
                             //获得文件上传的内容
                            InputStream in = item.getInputStream(); 
                            String Path_stor= this.getServletContext().getRealPath("upload");
                            OutputStream out = new FileOutputStream(Path_stor+"/"+name);
                            IOUtils.copy(in, out);
                            in.close();
                            out.close();
                            item.delete();//删除临时文件
                         }
                    }
                }

         }
         }catch (FileUploadException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    }
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值