上传

来源:互联网 发布:数控铣床编程实验报告 编辑:程序博客网 时间:2024/04/30 04:06
上传(上传不能使用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 blockthrow new RuntimeException(e);}}}


0 0