上传

上传(上传不能使用BaseServlet)

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. 上传对Servlet限制
  * request.getParametere("xxx");这个方法在表单为enctype="multipart/form-data"时,它作废了。它永远都返回null

  * ServletInputStream request.getInputStream();包含整个请求的体!

多部件表单的体
1. 每隔出多个部件,即一个表单项一个部件。
2. 一个部件中自己包含请求头和空行,以及请求体。
3. 普通表单项:
  > 1个头:Content-Disposition:包含name="xxxx",即表单项名称。
  > 体就是表单项的值
4. 文件表单项:
  > 2个头:
    * Content-Disposition:包含name="xxxx",即表单项名称;还有一个filename="xxx",表示上传文件的名称
    * Content-Type:它是上传文件的MIME类型,例如:image/pjpeg,表示上传的是图片,图上中jpg扩展名的图片。
  > 体就是上传文件的内容。

-----------------------------7e0d2950c62
Content-Disposition: form-data; name="username"


鐙?
-----------------------------7e0d2950c62
Content-Disposition: form-data; name="picture"; filename="dog.jpg"
Content-Type: image/pjpeg

1. 上传三步
  相关类:
  * 工厂:DiskFileItemFactory
  * 解析器:ServletFileUpload
  * 表单项:FileItem
  1). 创建工厂:DiskFileItemFactory factory = new DiskFileItemFactory();
  2). 创建解析器:ServletFileUpload sfu = new ServletFileUpload(factory);
  3). 使用解析器来解析request,得到FileItem集合:List<FileItem> fileItemList = sfu.parseRequest(request);

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

 <h1>上传1</h1>
  <form action="<c:url value='/UploadServlet'/>" method="post" enctype="multipart/form-data">
  用户名:<input type="text" name="username" /><br />
  照片:<input type="file" name="picture" /><br />
  <input type="submit" value="上传" />
  </form>

public class UploadServlet extends HttpServlet {

	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		
		/*
		 * 上传包括三步:
		 * 1. 创建工厂
		 * 2. 通过工厂创建解析器
		 * 3. 解析request,得到FileItem集合
		 * 4. 遍历FileItem集合,调用其API完成文件的保存
		 */
		DiskFileItemFactory factory =new DiskFileItemFactory();
		ServletFileUpload sfu=new ServletFileUpload(factory);
		try {
			List <FileItem> fileItemList=sfu.parseRequest(request);
			FileItem fi1=fileItemList.get(0);
			FileItem fi2=fileItemList.get(1);
			System.out.println("普通表单项:"+fi1.getFieldName()+"="
					+fi1.getString("utf-8"));
			System.out.println("文件表单项:");
			System.out.println("Content-Type:"+fi2.getContentType());
			System.out.println("size:"+fi2.getSize());
			System.out.println("filename:"+fi2.getName());
			//保存文件
			File file=new File("E:/1.jpg");
			fi2.write(file);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				throw new RuntimeException(e);
			}
		
		
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值