文本域(input file)上传文件的深入探究

  最近在要做一个文件上传方面的功能,看了一些资料,有收获在这里跟大家分享一下。

  大家应该都知道html表单元素<input type="file"/>是用来上传文件的。但是它究竟是如何传递的后台,后台又如何将数据提取出来呢?我们一起来看看。

  首先我们写一个普通的表单提交。

  

View Code
1 <form id="testForm" action="upload.ashx" method="post" enctype="multipart/form-data">
2 <input type="file" onchange="javascript:document.getElementById('testForm').submit();" runat="server" id="fileBox" name="fileBox"/>
3 </form>

 

  然后新建一个一般处理程序upload.ashx,ProcessRequest内的代码如下。

  

 1             context.Response.ContentType = "text/plain";
2 HttpRequest request = context.Request;
3 int totalByets = request.TotalBytes;//传入数据流的总大小
4 int readedBytes = 0;
5 byte[] biData;
6 string end = "";
7 while (readedBytes < totalByets)
8 {
9 if ((totalByets - readedBytes) < 1024)
10 biData = request.BinaryRead(totalByets);
11 else
12 biData = request.BinaryRead(1024);
13 Encoding encod = Encoding.Default;
14 readedBytes += 1024;
15 end += encod.GetString(biData);
16 }
17 context.Response.Write(end);
18 context.Response.End();

 

我们新建一个文本文档test.txt。假设内容为“测试文档”。

运行上面的网页,选择文件test.txt.我们将看到如下内容。

 

------WebKitFormBoundaryNfHsy1JK9aIAQ0SS
Content-Disposition: form-data; name="file1"; filename="test.txt"
Content-Type: text/plain

测试文档
------WebKitFormBoundaryNfHsy1JK9aIAQ0SS--
 
 
由此看见,由表单提交上来的数据流中包含了一些如文件名、文件类型等信息。同时这些信息是用一些特定的字符包裹的。如本例中的“------WebKitFormBoundaryNfHsy1JK9aIAQ0SS”。(可以用context.Request.ServerVariables[HTTP_CONTENT_TYPE]取到)
同样如果是选择图片文件的话,情况类似。
以上只是为了搞懂form传过来的数据结构。我们可以直接使用context.Request.Files来获取表单传递过来的文件。

 

 

转载于:https://www.cnblogs.com/hnlong1/archive/2011/11/08/2240494.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值