2010-07-07 57 views
0

我已經實現了文件上傳(在閱讀斯科特Hanselman的excellent post多文件上傳關聯

我有一個表格上,雖然各種問題相關的多個文件,並想每個保存的文件有內部關聯ID。

我該怎麼做?例如,如果問題#3的文件上傳了abc.pdf,我如何才能將該文件與ID#3關聯?

任何好主意,或有人做過之前呢?

回答

0

好的,想出了一個簡單的解決方案。由於Request.Files [x]對象沒有任何對字段的引用,所以我很掙扎,但Request.Files(HttpFileCollectionWrapper)有一個AllKeys屬性來存放字段數組。我現在的代碼是:

for (int fileIndex = 0; fileIndex < Request.Files.Count; fileIndex++) 
    { 
      string fieldName = Request.Files.AllKeys[fileIndex]; <--- Here is where you can gleam an key to persist to the database, I have an ID in the fieldName 
      string savedFileName = Path.GetFileName(Request.Files[fileIndex].FileName); 
      var path = Path.Combine(<your server save path>, savedFileName); 
      Request.Files[fileIndex].SaveAs(path); 
    } 

夠簡單!

1

我會有一個數組或矢量在一個文件與getter和setter。當問題#3上傳文件abc.pdf時,您可以將要保存的信息發送給setter並將其保存在索引3處。如果要訪問它,請使用索引3的getter。

取決於什麼你想保存你創建一個數組來保存你想要的東西。我沒有使用Asp.net,但是this site告訴你如何對一個我們不想要的數組進行排序,但是它也顯示瞭如何創建一個結構數組。所以如果你只想保存文件的名字,那麼你只需要一個字符串數組。但是如果您需要保存名稱和其他內容,請創建結構數組。

Private Structure FileInfo 
    Public Name As String 
    Public OtherInfo As String 
End Structure 

然後創建數組:

Dim FileInfoArray(NumOfPotentialUploadedFiles - 1) As FileInfo 

因爲它聽起來像每個輸入字段上傳一個文件中的每個你只需要記住字段的ID號碼,然後你就易於「知道上傳的文件與哪些ID關聯」,就好像字段1有一個上傳的文件,那麼它將在陣列中的相同位置。您可以在第一次創建數組時在結構中設置爲false的布爾值。然後,當您上傳索引1的文件時,您將布爾值更改爲true。通過這種方式,您可以輕鬆地知道在通過數組b/c時您擁有哪些文件,只有具有真值的位置纔有文件。

+0

嘿凱拉,那還不錯。所以我正確理解你,你會添加一個數組給他們ViewModel並使用ID和FileName來更新它? 這將工作... – 2010-07-07 23:18:10

+0

但你怎麼知道哪個文件對應於哪個ID?假設你有3個文件輸入字段,#1,#2和#3,如果只有2個文件被上傳(比如說#1和#3),你怎麼知道上傳文件與哪個ID相關聯?陣列在這裏沒有幫助。 – 2010-07-08 00:08:03