FileUpload组件(文件上传下载)

文件上传

实现web开发中的文件上传功能,操作步骤:
        1.在web页面中添加上传输入项。
        2.在servlet中读取上传文件的数据,并保存到本地硬盘中。
<input type=“file”>标签用于在web页面中添加文件上传输入项,设置文件上传输入项时 须注意
1.必须要设置input输入项的name属性,否则浏览器将不会发送上传文件的数据。
2.必须把form的enctype属值设为“ multipart/form-data
2.必须把form的method属性设置为post方式。
附加知识:
         enctype属性规定在发送表单数据之前如何对其进行编码。属性可能的值:
application/x-www-form-urlencoded 在发送前编码所有字符(默认)。
multipart/form-data 不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。
text/plain 空格转换为 "+" 加号,但不对特殊字符编码。

方式1:手动实现文件上传

案例中上传的文件a.txt


web页面:

    
    
    
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <head>
  5. <title>手动执行文件上传</title>
  6. <meta http-equiv="pragma" content="no-cache">
  7. <meta http-equiv="cache-control" content="no-cache">
  8. <meta http-equiv="expires" content="0">
  9. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  10. <meta http-equiv="description" content="This is my page">
  11. <!--
  12. <link rel="stylesheet" type="text/css" href="styles.css">
  13. -->
  14. </head>
  15. <body>
  16. <form action="${pageContext.request.contextPath }/TestServlet" method="post" enctype="multipart/form-data">
  17. 用户名:<input type="text" name="userName"/><hr/>
  18. 文件:<input type="file" name="file1"/>&nbsp;&nbsp;<input type="submit" value="提交"/>
  19. </form>
  20. </body>
  21. </html>

Servlet手动获取上传文件

    
    
    
  1. package com.cn.servlet;
  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.ServletInputStream;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. /**
  11. * 手动获取文件上传
  12. * @author liuzhiyong
  13. *
  14. */
  15. public class TestServlet extends HttpServlet {
  16. public void doGet(HttpServletRequest request, HttpServletResponse response)
  17. throws ServletException, IOException {
  18. //获取表单(POST)提交的数据流
  19. ServletInputStream in = request.getInputStream();
  20. //转换流
  21. InputStreamReader inStream = new InputStreamReader(in);
  22. //缓冲流
  23. BufferedReader reader = new BufferedReader(inStream);
  24. //输出数据
  25. String str = null;
  26. while((str=reader.readLine()) != null){
  27. System.out.println(str);
  28. }
  29. //关闭
  30. reader.close();
  31. inStream.close();
  32. in.close();
  33. }
  34. public void doPost(HttpServletRequest request, HttpServletResponse response)
  35. throws ServletException, IOException {
  36. this.doGet(request, response);
  37. }
  38. }

效果:


由于手动上传文件,需要另外去解析,所以使用现成的工具,详见方式2.

方式2:文件上传组件(FileUpload组件,推荐)

         文件上传功能开发中很常用,Apache组织也提供了文件上传组件,FileUpload组件。

FileUpload组件使用步骤:

        下载组件,引入jar文件
           commons-fileupload-1.2.1.jar
           commons-io-1.4.jar
         共2个jar包, 点击打开链接,即可使用其API了。

FileUpload组件API:

|-Interface FileItemFactory 文件上传工厂类(把每一个请求表单项封装为一个个FileItem对象)
|--Class DiskFileItemFactory
|----void setRepository(java.io.File repository) 设置临时缓存目录

|-Class ServletFileUpload  文件上传核心类对象,可以获取所有的FileItem对象
|----List parseRequest(javax.servlet.http.HttpServletRequest request) 获取所有文件上传项FileItem
|----boolean isMultipartContent(javax.servlet.http.HttpServletRequest request)  判断上传表单是否为multipart/form-data类型(即 判断当前表单是否为文件上传表单 ),如果是返回true
|----void setFileSizeMax(long fileSizeMax) 设置单个文件上传最大值
|----void setSizeMax(long sizeMax) 设置总的文件最大大小
|----void setHeaderEncoding(java.lang.String encoding) 设置上传的文件名的编码,相当于request.setCharacterEncoding(encoding)

|-Interface FileItem 封装了普通表单项数据以及文件上传表单数据
|----String getFieldName() 获取上传表单元素名称
|----String getString() 获取上传元素值
|----String getString(java.lang.String encoding) 获取上传元素值,并处理格式
|----String getContentType() 获取上传文件类型【仅上传文件表单项有数据】
|----InputStream getInputStream() 获取post方式提交上来的上传文件流【仅文件上传表单项有数据】
|----String getName() 获取上传文件名
|----void write(java.io.File file) 写文件到指定文件
|----void delete() 删除临时文件

使用FileUpload组件测试:

web页面

    
    
    
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <head>
  5. <title>手动执行文件上传</title>
  6. <meta http-equiv="pragma" content="no-cache">
  7. <meta http-equiv="cache-control" content="no-cache">
  8. <meta http-equiv="expires" content="0">
  9. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  10. <meta http-equiv="description" content="This is my page">
  11. <!--
  12. <link rel="stylesheet" type="text/css" href="styles.css">
  13. -->
  14. </head>
  15. <body>
  16. <form action="${pageContext.request.contextPath }/FileUpLoadServlet" method=
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值