2010-07-07 69 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