我已经实施了文件上传(在阅读Scott Hanselman的excellent post)
时我有多个与表单上的各种问题相关联的文件,并希望将每个保存的文件与内部ID相关联。
我该怎么做?例如,如果问题#3上传了一个文件abc.pdf,我该如何将该文件与ID#3相关联?
有什么好主意,或者之前有人做过这个?
答案 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);
}
够容易!