2010-07-07 3 views
0

Я реализовал Upload File (при чтении Скотт Hanselman-х excellent post)несколько файлов в MVC

У меня есть несколько файлов, связанных с различными вопросами по форме, хотя и хотел бы связать каждый сохраненный файл с внутренним Я БЫ.

Как я могу это сделать? Например, если вопрос №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

У меня был бы массив или вектор в одном из файлов с геттером и сеттер. Таким образом, когда вопрос №3 загружает файл abc.pdf, вы можете отправить информацию, которую хотите сохранить, в настройщик и сохранить ее в индексе 3. Когда вы хотите получить к ней доступ, используйте геттер для индекса 3.

В зависимости от того, вы хотите сохранить создание массива, который содержит то, что вы хотите. Я не использовал Asp.net, но this site рассказывает вам, как сортировать массив, который нам не нужен, но он также показывает, как создать массив структур. Поэтому, если вы хотите сохранить имя файла только тогда, вам понадобится только массив строк. Но если вам нужно сохранить имя и что-то еще, создайте массив структур.

Private Structure FileInfo 
    Public Name As String 
    Public OtherInfo As String 
End Structure 

Затем создайте массив:

Dim FileInfoArray(NumOfPotentialUploadedFiles - 1) As FileInfo 

Поскольку это звучит, как каждый из ваших полей ввода загрузить один файл каждый вам просто нужно будет помнить номер документа полей, а затем вы бы легко msgstr "знать, с какими идентификаторами связаны загруженные файлы", как будто в поле 1 есть загруженный файл, тогда он будет в массиве в той же позиции. Вы можете создать логическое значение в структуре, для которой установлено значение false, когда вы сначала создаете массив. Затем, когда вы загружаете файл индекса 1, вы меняете логическое на true. Таким образом, вы легко знаете, какие файлы у вас есть, когда вы проходите через массив b/c, только позиции с истинным значением имеют файл.

+0

Эй, Кира, это неплохо. Итак, я правильно вас понимаю, вы бы добавили массив в ViewModel и обновили его с помощью идентификатора и имени файла? Это сработало бы ... –

+0

Но как бы вы узнали, какой файл соответствует идентификатору? Скажем, у вас есть 3 поля ввода файлов: # 1, # 2 и # 3, если только 2 файла были загружены (скажем, №1 и №3), как вы узнаете, с какими идентификаторами связаны загруженные файлы? Массив не помог бы там. –

Смежные вопросы