MVC中的多文件上载关联

时间:2010-07-07 21:44:11

标签: asp.net asp.net-mvc file upload

我已经实施了文件上传(在阅读Scott Hanselman的excellent post

我有多个与表单上的各种问题相关联的文件,并希望将每个保存的文件与内部ID相关联。

我该怎么做?例如,如果问题#3上传了一个文件abc.pdf,我该如何将该文件与ID#3相关联?

有什么好主意,或者之前有人做过这个?

2 个答案:

答案 0 :(得分: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时,只有具有true值的位置才能轻松知道您拥有哪些文件。

答案 1 :(得分: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);
    }

够容易!