.net c# 提交包括文件file 的form表单 获得文件的Stream流

1.前台html代码  

    要写一个有id的form,但是不能有runat="server"属性。因为一个页面中,有这个属性的form表单只能有一个。

再要有一个有name的iframe,要设置它的样式为不显示,即display为none。使用iframe的好处是,提交该表单,

不会刷新页面,只会刷新这个不可见的iframe。

    把form表单的target设置为iframe的name值,form表单的 action设置为表单要提交到的处理程序。

这个处理程序中,会接收到form表单中所有有name属性的控件的值,包含文件:

<input type="file" name="uploadfile" id="uploadfile" />

    WebForm的文件要想上传到服务器端,不能用.net本身的FileUpLoad控件,貌似是因为会遇到权限问题,无法解析。所以,用本文所用的以表单的形式post过去,再在接收端用C#代码: 
var file = context.Request.Files[0]; var stream = file.InputStream;来获得文件和文件流。

1 <form id="fileInfo" enctype="multipart/form-data" target="screct_frame" method="POST" action="../../Handlers/needsPlanCreateHandler.ashx?sign=readExcel">  
2      
3     <input type="file" name="uploadfile" id="uploadfile" />  
4     <button class="btn btn-default" type="submit" >确定</button>                                          
5                                         
6 </form>  
7 <iframe name="screct_frame" style="display: none;"></iframe>  

2.一般处理程序代码,即上面form所提交到的action端的处理代码

 1 private void ReadExcel(HttpContext context)  
 2         {  
 3             context.Response.ContentType = "text/html";  
 4             try  
 5             {  
 6                 var file = context.Request.Files[0];  
 7                 if (file.FileName == "")  
 8                 {  
 9                     context.Response.Write("<script>parent.callback('请先导入文件');</script>");  
10                 }  
11                 var stream = file.InputStream;  
12                 //这里可以对文件流做些什么  
13                   
14             }  
15             catch (Exception ex)  
16             {  
17                 context.Response.Write("<script>parent.callback(" + ex.ToString() + ");</script>");  
18             }  
19         }  
View Code

说明:上面的parent.callback()这个方法,callback()是iframe所在的页面定义的js方法,前面使用parent时因为,

 

当前提交的是在iframe中,使用parent可以获得页面对象,iframe可以通过parent或top来找到父级页面,

可以执行父级页面的js脚本。

posted on 2017-06-09 08:59  alex5211314  阅读(701)  评论(0编辑  收藏  举报

导航