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"));

posted @ 2018-09-13 12:46  武当张三丰  阅读(154)  评论(0编辑  收藏  举报