2012-09-28 112 views
0

如果你在頁面上放置一個asp:FileUpload控件,瀏覽到一個文件,然後提交表單。是在您提交表單時上傳到服務器的文件?什麼時候使用FileUpload控件上傳文件?

我已經看到大量文件上傳的例子,其中文件被傳遞到文件流並上傳。

我不明白髮生了什麼時。點擊上傳按鈕後,代碼正在服務器上執行。因此,FileUpload控件使用FileUpload.PostedFile(或httpFileCollection)提供的文件(文件名?文件路徑?)會在提交表單時上傳?服務器如何訪問客戶端計算機上的文件,以便使用文件流進行上載。

我不明白。我一直在閱讀文件流以塊的形式傳遞(可以傳遞)數據 - 幫助繞過文件大小的限制等,但是,正如我上面所說的,文件何時/如何上傳到服務器?

回答

1

<asp:FileUpload>控件呈現<input type="file">,並將表單的內容類型設置爲multipart/form-data

當瀏覽器提交<form><input type="file">時,它會將整個文件發送到HTTP POST中的服務器(這是內容類型的一部分)。

+0

感謝您的回答 - 所有文件流的內容是什麼?爲什麼不保存HttpPostedFile文件? 我一直在尋找代碼來報告上傳的進度 - 而且,這一切似乎都使用FileStream - 但是如果文件在發佈表單時一次性上傳到服務器,這將如何工作? –

+0

是代碼在這裏: http://www.codeproject.com/Articles/106511/Multiple-file-uploads-with-progress-bar-using-clas 實際上監視文件,因爲它從瀏覽器移動到服務器? –

1

當你點擊上傳時,html表單被提交,併發送一個post請求到服務器。

它實際上並沒有向您發送可以直接存儲的某種「文件」對象,只是文件的內容(以字節爲單位)和一些元數據(如文件名)。

在服務器上,您必須處理此請求:您必須將字節讀入實際文件才能正確存儲它。

在你提到的例子中,這是HttpPostedFile的用途。

+0

HttpFileCollection hfc = Request.Files; HttpPostedFile hpf = hfc [0]; string FilePath = hpf.FileName; FileStream fs = new FileStream(FilePath,FileMode.Open,FileAccess.Read); 你說當發佈時,'文件的內容以字節爲單位'被髮送到服務器。在上面的代碼中,如果文件內容已經發送到服務器,那麼將它發送到文件流時有什麼意義?當您可以輕鬆地做到這一點時: hpf.SaveAs(path + ReturnValue.ToString()+「 \\「+ Path.GetFileName(hpf.FileName)); –

+0

將文件流讀入文件並使用SaveAs方法將字節存儲到文件中。不同之處在於,使用文件流方法可以獲得有關進度的一些信息。這就是這個例子。 – Anna

相關問題