【问题标题】:Multiple file upload association in MVCMVC中的多个文件上传关联
【发布时间】:2010-07-07 21:44:11
【问题描述】:

我已经实现了文件上传(通过阅读 Scott Hanselman 的 excellent post

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

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

有什么好的想法,或者以前有人做过吗?

【问题讨论】:

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


    【解决方案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 时,您很容易知道您拥有哪些文件,只有具有真值的位置才有文件。

    【讨论】:

    • 嘿,凯拉,这还不错。所以我理解正确,您会向他们的 ViewModel 添加一个数组并使用 ID 和 FileName 更新它?那行得通……
    • 但是你怎么知道哪个文件对应哪个ID呢?假设您有 3 个文件输入字段 #1、#2 和 #3,如果只上传了 2 个文件(例如 #1 和 #3),您如何知道上传的文件与哪些 ID 相关联?数组在那里不会有帮助。
    【解决方案2】:

    好的,想出了一个简单的解决方案。我一直在苦苦挣扎,因为 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);
        }
    

    很简单!

    【讨论】:

      猜你喜欢
      • 2019-01-29
      • 2016-07-12
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-04
      • 1970-01-01
      相关资源
      最近更新 更多