檔案上傳的一些疑惑
這幾天在寫檔案上傳的程式時針對Stream的讀寫有些疑惑一直無法搞懂,survery了一些文章後,將搞懂的整理如下: Client透過什麼樣的方式,傳送給Server端? 在送出的表單設定Content-Type:multipart/form-data,此為將表單內若有其他不同類型資料時需包成一個Request,並將檔案轉成2進位透過Post送出。送出前透過boundary=" 分隔的識別字串 "來區隔送出的資料,如下圖boundary=----WebKitFormBoundaryEZDuDWbyAS56kbIR分隔2個欄位,一個為輸入文字(123),另一個為上傳檔案。 Client端送出後,Server端接收到的檔案Stream來源為何? IIS收到資料後會將完整的內容暫存在Temp File內,而應用程式再將相關資訊讀出,例:Controller收到的FormCollection及HttpPostedFileBase檔案上傳物件。HttpPostedFileBase.InputStream的基底類別是FileStream,用來讀取暫存檔內屬於上傳檔案的部份。這也是釐清為何在觀察w3wp.exe,在Server端還未讀取Stream的資料時,記憶體不會增加。 圖:為HttpPostedFileBase.InputStream Trace後的資訊 參考來源 http://huan-lin.blogspot.com/2012/04/about-aspnet-file-upload.html