2010-12-06 23 views
0

我在ASP.NET 3.5中編程。在上傳的文件上執行進程.NET

我需要處理必須由用戶上傳的文件。該文件是特定的格式。基本上,我需要將文件中的信息解析出來,然後將其插入到SQL數據庫中。我沒有這樣做的問題,但我想知道如何從一個網站做到這一點。

我想我想創建一個用戶將有權訪問的共享,讓用戶將文件上傳到共享上,並且在上傳時,使用完整的UNC路徑將記錄保存到數據庫中。在該站點中,使用該UNC路徑處理該文件,然後將該文件移動到某個「已處理」文件夾。

有沒有人做過這樣的事情?是否有任何「標準」的做法與此類似?

謝謝。

回答

2

我不知道這是否對您有幫助,但是您可以在名稱空間System.Web.UI.WebControls中使用FileUpload類。

您可以查看MSDN: here

0

1)創建上傳輸入一個ASPX頁面。

2)讓用戶上傳文件

3)獲取ASP.NET上傳文件和二進制流寫入到文件,並在文件登記到數據庫以及

4)完成請求但在此之前產生一個後臺線程來處理文件

5)您需要對已註冊但未能出於任何原因處理的文件進行單獨的清理操作。

0

最快的解決辦法 - 如果你的文件處理將腳本超時之前完成,而你高興有用戶等待,而它發生:

地圖在您的網站的虛擬目錄來上傳文件夾 - 在我們的我們有/上傳/所有我們的網站服務器映射到我們的DMZ文件服務器上的一個開放的共享。

然後使用代碼這樣的事情在你的頁面代碼隱藏

protected void ProcessFilesButton_Click(object sender, EventArgs e) { 
    string uploadRootPath = Server.MapPath("~/upload/"); 

    foreach(var uploadedFile in Request.Files) { 

     // might want to use a GUID filename here instead 
     // to avoid risk of filename conflicts. 
     string bareFileName = Path.GetFileName(uploadedFile.FileName); 
     string fullFilePath = Path.Combine(uploadRootPath, bareFileName); 
     uploadedFile.SaveAs(fullFilePath); 
     myMagicFileProcessor.ProcessFile(fullFilePath); 
    } 
    MyLabel.Text = String.Format("{0} files processed", Request.Files.Count); 
} 

更復雜的解決方案將涉及產卵一個後臺線程(或單獨的Windows服務或計劃任務)來處理文件處理,然後返回帶有元刷新的「Please Wait ...」頁面,該頁面將每隔10秒重新繪製頁面,然後在代碼中查詢隊列中文件的狀態並報告他們作爲處理完成每一個。