簡體   English   中英

文件在不同頁面上傳

[英]File uploading on different pages

我被困在上傳不同頁面的文件。在一個頁面我打開一個彈出窗口,我要求用戶瀏覽並選擇文件,關閉選項,彈出窗口關閉然后我想從主頁面上傳文件,而不是從彈出。 我怎樣才能做到這一點? 我使用以下代碼來獲取上傳的文件:

HttpFileCollection uploads = HttpContext.Current.Request.Files;

如何從主頁面訪問此值,我在彈出窗口中使用HttpFilecollection

如果你考慮一下,你的問題實際上並不是如何從不同的頁面上傳文件。 它是“如何在ASP.NET中將值從一個頁面傳遞到另一個頁面?”

好消息是網上有一百萬篇文章解釋了如何做到這一點:

一種。 跨頁回發

如何在ASP.NET頁面之間傳遞值(MSDN)

C。 Steve C. Orr關於傳遞價值觀的另一篇文章

您需要傳遞的值是從彈出頁面到父頁面的HttpFileCollection 然后,您可以遍歷集合中的每個HttpPostedFile ,並根據您的邏輯調用Save

在JavaScript中,window有一個名為“opener”的屬性,它指的是父窗口。

因此,您可以調用window.opener從彈出窗口訪問父窗口,並執行您想要實現的任何操作。

要使用JavaScript,您可以使用document.createElement方法。

要使用ASP.NET,請使用HtmlTableRow類,並動態地向表中添加行。

我推薦JavaScript方法。

您可以嘗試使用跨頁回發 ,這是ASP.NET 2.0中的一項新功能

這是不可能的。

上傳必須由上傳控件所在的頁面完成。 您無法將信息傳輸到另一個窗口,而是讓它進行上傳。

上傳發送到服務器后,您必須立即處理。 上傳的文件只存在於該請求的文件集中,如果在處理該請求時沒有處理文件數據,它就會消失。

因此,如果您在彈出窗口中有上傳控件,則彈出窗口必須進行上傳。 發布彈出頁面時,您必須處理上傳的文件,但您當然可以在響應中放置有關上傳文件的一些信息,彈出窗口可以在彈出窗口關閉時發送到主頁面。

問題是出於安全原因,您無法設置input type =“file”元素的值。 你不希望邪惡的網站試圖上傳你的C:\\ whateverfiletheywant.dat

所以你必須在彈出窗口中上傳到臨時上​​傳目錄,並通過javascript(window.opener)發送用戶上傳到主表單的文件名

我做了很多次。

如果我必須在彈出窗口中上傳某些東西,就像我所做的一樣。

List<string> filesUploaded = new List<string>();
foreach (HttpPostedFile file in HttpContext.Current.Request.Files)
{
    if (file.ContentLength <= 0)
        continue;

    string filename = String.Format("{0}.jpg",Regex.Replace(Guid.NewGuid().ToString(), "[^A-Za-z0-9]*", String.Empty));
    file.SaveAs(Path.Combine(Server.MapPath("/upload/temp/"), filename));
    filesUploaded.Add(filename);
}
Response.Write(String.Format("<{0}>window.opener.FilesUploaded([{1}]);</{0}>","script", String.Join(",",filesUploaded.ToArray()).TrimEnd(new char[]{','})));

* note ... asp不喜歡你的c#代碼中的腳本標簽,所以這就是為什么script關鍵字在String.Format中

從我的經驗來看,我非常喜歡telerik上傳控件,它提供了很多東西,比如驗證,文件大小,允許的擴展等等。但是如果你想要實時進度,你最好使用銀燈或基於閃存的上傳控制,telerik提供那。

這里有一些與flash + ASP.Net實現它的鏈接

希望這可以幫助。

HI,您可以使用將文件名傳遞給父窗口

opener.SomeFunction

並將文件名作為數組傳遞給函數的參數。

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM