.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的文件要想上傳到server端,不能用.net本身的FileUpLoad控件,貌似是由於會遇到權限問題。無法解析。

所以,用本文所用的以表單的形式post過去,再在接收端用C#代碼: 
var file = context.Request.Files[0]; var stream = file.InputStream;來獲得文件和文件流。

 <form id="fileInfo" enctype="multipart/form-data" target="screct_frame" method="POST" action="../../Handlers/needsPlanCreateHandler.ashx?sign=readExcel">
    
     <input type="file" name="uploadfile" id="uploadfile" />
     <button class="btn btn-default" type="submit" >確定</button>                                        
                                       
 </form>
 <iframe name="screct_frame" style="display: none;"></iframe>
 
2.一般處理程序代碼,即上面form所提交到的action端的處理代碼
private void ReadExcel(HttpContext context)
        {
            context.Response.ContentType = "text/html";
            try
            {
                var file = context.Request.Files[0];
                if (file.FileName == "")
                {
                    context.Response.Write("<script>parent.callback('請先導入文件');</script>");
                }
                var stream = file.InputStream;
                //這里能夠對文件流做些什么
                
            }
            catch (Exception ex)
            {
                context.Response.Write("<script>parent.callback(" + ex.ToString() + ");</script>");
            }
        }
說明:上面的parent.callback()這種方法, callback()是iframe所在的頁面定義的js方法,前面使用parent時由於。

當前提交的是在iframe中,使用parent能夠獲得頁面對象,iframe能夠通過parent或top來找到父級頁面,

能夠運行父級頁面的js腳本。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM