javaweb文件上传

文件上传要素

1.表单的提交方式必须是post
2.表单中需要有元素,需要有name属性和值
3.表单enctype="multipart/form-data"

上传文件所需jar包

commons-fileupload.jar
commons-io-2.11.0.jar

HTML代码片段

例:(form标签中action指向的是servlet )

<body>
<h1>文件上传</h1>
<!-- 文件上传三要素
		*表单需要是post提交
		*表单中需要文件上传项,必须有name的属性和值
		*表单的enctype属性必须是multipart/form-data		
-->
	
	<form action="upload" method="post" enctype="multipart/form-data" >
		文件描述:<input type="text" name="info" ><br/>
		文件上传:<input type="file" name="upload"><br/>
		<input type="submit" value="上传" /> 
		
	</form>
	
</body>

文件上传代码片段

例: (提交到servlet中代码)

	//1.创建磁盘文件项工厂
		DiskFileItemFactory diskFileItemFactory=new DiskFileItemFactory();
		//2.创建一个核心的解析类
		 ServletFileUpload fileUpload=new ServletFileUpload(diskFileItemFactory);
		//3.利用核心类解析Request,解析后会得到多个部分。返回一个List集合。List集合装的每个部分的内容(FileItem文件项)。
		 try {
			List<FileItem>list= fileUpload.parseRequest(request);
			
			//4.遍历List集合,会得到代表每个部分的文件项的对象。根据文件项判断是文件上传项
			for(FileItem fileItem:list) {
				//判断这个文件项是普通项还是文件上传项。
				if(fileItem.isFormField()) {
				//普通项:
				//接受普通项的值:(接收值不能再使用request.getParameter())
				String name=fileItem.getFieldName();//获得普通项的名称
				//获得普通项的值
				String value=fileItem.getString("UTF-8");
				}else {
					//文件上传项:
					//获得文件上传项的文件的名称:
					String filename=fileItem.getName();
					//获得文件上传的文件的数据:
					InputStream is=fileItem.getInputStream();
					//获得文件上传的路径:磁盘绝对路径。
					String realPath=getServletContext().getRealPath("/upload");
					//创建一个输出流,写入到设置的路径中
					OutputStream os=new FileOutputStream(realPath+"/"+filename);
					//两个流对接:
					int len=0;
					byte[] b=new byte[1024];
					while((len=is.read(b))!=-1) {
						os.write(b,0,len);
					}
					is.close();
					os.close();
				}
			}
		} catch (FileUploadException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		

扩展

构造方法:
DiskFileItemFactory();
DiskFileItemFactory(int sizeThreshold,Java.io.File repository);

参数 sizeThreshold和 repository注解

  • sizeThreshold:设置文件上传的缓冲区大小,默认值为10kb
  • repository:设置文件上传过程中产生临时文件存放的路径

setSizeThreshold和setRepository注解及使用

  • setSizeThreshold:设置缓冲区大小
  • setRepository:设置文件上传过程中产生临时文件存放的路径
代码片段
		//1.创建磁盘文件项工厂
		DiskFileItemFactory diskFileItemFactory=new DiskFileItemFactory();
		//1.1设置缓冲区的大小:
		diskFileItemFactory.setSizeThreshold(3*1024*1024); //设置缓冲区的大小为3M
		//1.2设置临时文件存放的路径:
		//获得临时文件存放的路径:
		String tempPath=getServletContext().getRealPath("/temp");
		diskFileItemFactory.setRepository(new File(tempPath));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值