文件上传原理

1. 原理:

(个人概述:前台用form表单,将文件放在request中。后台用request.getInputStream()从request中获取文件,主要是读取文件流,再将文件流写到指定文件路径下。
众所周知,在客户端代码中需要使用 <input type='file' name='file' /> 来选择要上传的文件,并上传,代码如上:
< form  action ="servlet/UploadFile"  method ="post"
            enctype
="multipart/form-data" >
            
< input  type ="file"  name ="file1"  id ="file1"   />
            
< input  type ="file"  name ="file2"  id ="file2"   />
            
< input  type ="submit"  value ="上传"   />
</ form >
在上传文件时, <form> 标签必须加上 enctype="multipart/form-data" ,否则浏览器无法将文件内容上传到服务端。在 Servlet doPost 方法中编写如下的代码
public  void doPost(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException
    {
        java.io.InputStream is = request.getInputStream();
        java.io.FileOutputStream fos =  new java.io.FileOutputStream("d:\\out.txt");
        
         byte[] buffer =  new  byte[8192];
         int count = 0;
         while((count = is.read(buffer)) >0)
        {
            fos.write(buffer, 0, count);
        }        
        fos.close();
    }

2.为什么上传文件要加一个属性enctype="multipart/form-data"

首先知道enctype这个属性管理的是表单的MIME编码。共有三个值可选:
1、application/x-www-form-urlencoded
其中application/x-www-form-urlencoded是默认值,作用是设置表单传输的编码。
2、multipart/form-data
而multipart/form-data是用来制定传输数据的特殊类型的,主要就是我们上传的非文本的内容
3、text/plain
text/plain是纯文本传输的意思,在发邮件的时候要设置这种编码类型

3.后台对以上三种的获取方式:

大家经常 用servlet和jsp,但是对 request.getInputStream()和request.getReader()比较陌生。
request.getParameter() 
request.getInputStream()
request.getReader()
这 三个方法都是从request对象中得到提交的数据,但是用途不同,要根据<form>表单提交数据的编码方式选择不同的方法。
分别对应: application/x-www-form-urlencoded;     multipart/form-data;           text/plain
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值