• Web的文件上传


    一、上传

    1、上传一般都是使用表单,需要添加以下部分
            * method="post"
            * enctype="multipart/form-data"
            * 表单中需要添加文件表单项:<input type="file" name="xxx" />

    <form action="xxx" method="post" enctype="multipart/form-data">
      用户名;<input type="text" name="username"/><br/>
      照 片:<input type="file" name="zhaoPian"/><br/>
      <input type="submit" value="上传"/>
    </form>

    2、上传会让request.getParametere("xxx")方法失效,此时将上传表单项分为普通表单项和文件表单项。

               普通表单项:
                > 1个头:Content-Disposition:包含name="xxxx",即表单项名称。
                > 体就是表单项的值
               文件表单项:
                > 2个头:
                  * Content-Disposition:包含name="xxxx",即表单项名称;还有一个filename="xxx",表示上传文件的名称
                  * Content-Type:它是上传文件的MIME类型,

                                              例如:image/pjpeg,表示上传的是图片,图上中jpg扩展名的图片。
                  > 体就是上传文件的内容。

    3、上传步骤

            准备工作:导入commons-fileupload.jar, commons-io.jar俩个包

             1). 创建工厂:DiskFileItemFactory factory = new DiskFileItemFactory();
             2). 创建解析器:ServletFileUpload sfu = new ServletFileUpload(factory);
             3). 使用解析器来解析request,得到FileItem集合:List<FileItem> fileItemList = sfu.parseRequest(request);

                                              注意:List的顺序与表单项从上到下的顺序一致。

              FileItem常用的方法:
                    * boolean isFormField():是否为普通表单项!返回true为普通表单项,如果为false即文件表单项!
                    * String getFieldName():返回当前表单项的名称;
                    * String getString(String charset):传入编码,返回表单项的值;
                    * String getName():返回上传的文件名称
                    * long getSize():返回上传文件的字节数
                    * InputStream getInputStream():返回上传文件对应的输入流
                    * String getContentType():获取上传文件类型
                    * void write(File destFile):把上传的文件内容保存到指定的文件中。

    		//创建将要保存文件的文件流
    	        File file=new File("C:/Users/13928/Desktop/图标.jpg");	
    		item2.write(file);	//将文件流写入服务器

    4、上传文件的大小限制

    •     单个文件大小限制

        > sfu.setFileSizeMax(100*1024):限制单个文件大小为100KB,必须在解析开始之前调用!
        > 如果上传的文件超出限制,在parseRequest()方法执行时,会抛出异常!FileUploadBase.FileSizeLimitExceededException

    •    整个请求所有数据大小限制

        > sfu.setSizeMax(1024 * 1024):限制整个表单大小为1M,必须在解析开始之前调用!
        > 如果上传的文件超出限制,在parseRequest()方法执行时,会抛出异常!FileUploadBase.SizeLimitExceededException


    5、缓存大小与临时目录
                     * 缓存大小:上传文件超出多大,才向硬盘保存!默认为10KB
                     * 临时目录:向硬盘的什么目录保存
                      设置缓存大小与临时目录:new DiskFileItemFactory(20*1024, new File("E:/temp"));

  • 相关阅读:
    shell脚本的分发,测试,查看
    shell 脚本获取cpu信息(转载)
    shell 脚本编写之获取字符串长度(转载)
    service
    关于Linux安装中NAT模式和桥接模式的区别详解(转载)
    kdj
    pod 详解
    k8s基本概念,资源对象
    AliOS Things添加环境变量
    子函数通过一级指针访问二维数组
  • 原文地址:https://www.cnblogs.com/MrQlyn/p/10236310.html
Copyright © 2020-2023  润新知