zoukankan      html  css  js  c++  java
  • 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"));

  • 相关阅读:
    建站两个月,说说我的想法
    我见过的郭弃疾先生(兰亭集势CEO)
    C#数组和集合互相转换的几种方法的效率分析
    (五)React Ant Design Pro + .Net5 WebApi:后端环境搭建Autofac注入+ 泛型仓储
    关于C++中对私有的测试总结
    uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型(转)
    GDB调试
    linux删除乱码文件
    转:C++ nan
    vim
  • 原文地址:https://www.cnblogs.com/MrQlyn/p/10236310.html
Copyright © 2011-2022 走看看