2008-12-17 101 views
0

在我下面的代碼中,我試圖通過ASP.NET上傳文件。我動態創建FileUpload控件,這意味着它不在我的ViewState中(我認爲)意味着我不能使用控件上傳文件,除非我使用舊式multipat/form-data方式,而我不想做。我需要能夠允許用戶創建多個FileUpload字段,然後當他們單擊Upload File(s)按鈕時,它將遍歷所有FileUpload字段並將其上載到服務器。如何從ASP.NET動態創建的FileUpload控件上傳文件?

我確定有一種方法可以做到這一點,我只是沒有想到 - TIA!

<%@ Page Language="VB" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<script runat="server"> 

    Protected Sub btnAdd_Click(ByVal sender As Object, ByVal e As System.EventArgs) 
     Dim fup As New FileUpload() 
     fup.ID = "FileUpload1" 

     PlaceHolder1.Controls.Add(fup) 
    End Sub 

    Protected Sub btnUploadFile_Click(ByVal sender As Object, ByVal e As System.EventArgs) 
     ' HOW DO I GET THE FILE THAT WAS SELECTED IN THE DYNAMICALLY CREATE FILEUPLOAD CONTROL? 
    End Sub 
</script> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div style="padding:13px"> 
     <asp:Button ID="btnAdd" runat="server" Text="Add FileUpload Control" OnClick="btnAdd_Click" /> 
     <br /><br /> 
     <asp:PlaceHolder ID="PlaceHolder1" runat="server" /> 
     <br /><br /> 
     <asp:Button ID="btnUploadFile" runat="server" Text="Upload File(s)" OnClick="btnUploadFile_Click" /> 
    </div> 
    </form> 
</body> 
</html> 

回答

1

這裏是上面的一個更長的版本:C#

print("HttpFileCollection UploadedFiles = Request.Files; 
    HttpPostedFile UserPostedFile; 
    int UploadFileCount = UploadedFiles.Count; 
    if (UploadFileCount >= 1) 
    { 
    for (int i = 0; i < UploadFileCount; ++i) 
    { 
     UserPostedFile = UploadedFiles[i]; 
     UserPostedFile.SaveAs(UserPostedFile.FileName); 
    } 
    }"); 
2

您可以使用Request.Files

它包含了上傳文件作爲HttpPostedFile對象。

foreach(HttpPostedFile file in Request.Files) 
    file.SaveAs(...); 
0

我得到這個錯誤,當我嘗試(我假設是因爲沒有ENCTYPE =「的multipart/form-data的」像我提到不想在我原來的職位做):

無法投射「System.String」類型的對象以鍵入「System.Web.HttpPostedFile」。 描述:執行當前Web請求期間發生未處理的異常。請查看堆棧跟蹤以獲取有關該錯誤的更多信息以及源代碼的位置。

異常詳細信息:System.InvalidCastException:無法將類型爲「System.String」的對象轉換爲鍵入「System.Web.HttpPostedFile」。

源錯誤:

線13: 第14行:保護小組btnUploadFile_Click(BYVAL發件人爲對象,BYVALË作爲System.EventArgs) 線15:爲每個文件作爲HttpPostedFile在Request.Files 第16行:Response.Write(file.FileName) 17行:Next

0

問題是FileUpload控件已鎖定FileName參數從編程方式設置。其原因是保護用戶免受某些惡意腳本的影響,以決定是否要將系統文件上傳到服務器,而不是用戶想要的內容。

在上述情況下,您將無法使用FileUpload控件,因此您需要尋找替代方案。

0

"You will not be able to use the FileUpload control in the situation you describe above, you'll want to seek out an alternative."

真的嗎?沒有辦法將動態創建的控件保存到ViewState或其他東西中,以便您的頁面能夠記住它在那裏,以便在PostBack之後訪問它。

相關問題