【发布时间】:2010-07-07 21:44:11
【问题描述】:
我已经实现了文件上传(通过阅读 Scott Hanselman 的 excellent post)
我有多个文件与表单上的各种问题相关联,并且希望将每个保存的文件与内部 ID 相关联。
我该怎么做?例如,如果第 3 题有一个上传的文件 abc.pdf,我如何将该文件与 ID #3 关联?
有什么好的想法,或者以前有人做过吗?
【问题讨论】:
标签: asp.net asp.net-mvc file upload
我已经实现了文件上传(通过阅读 Scott Hanselman 的 excellent post)
我有多个文件与表单上的各种问题相关联,并且希望将每个保存的文件与内部 ID 相关联。
我该怎么做?例如,如果第 3 题有一个上传的文件 abc.pdf,我如何将该文件与 ID #3 关联?
有什么好的想法,或者以前有人做过吗?
【问题讨论】:
标签: asp.net asp.net-mvc file upload
我会在一个带有 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 时,您很容易知道您拥有哪些文件,只有具有真值的位置才有文件。
【讨论】:
好的,想出了一个简单的解决方案。我一直在苦苦挣扎,因为 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);
}
很简单!
【讨论】: