2013-09-03 5 views
1

Мне интересно, возможно ли в MVC4 (.net 4.5) загрузить файл на сервер и сохранить его в памяти. Затем в отдельной записи формы собирайте этот файл и обрабатывайте его в этот момент.Извлечение ранее загруженного файла

Мне нужно иметь возможность загружать файл на одной части моей страницы, а затем иметь возможность отправлять некоторые детали формы на другой, но иметь доступ к файлу, который я только что загрузил. По логическим причинам я не могу одновременно публиковать файлы в основной форме. Они должны быть разделены.

ответ

2

В то время как вы можете сохранить файл в памяти сессии, есть несколько рисков в этом:

  • Что делать, если кто-то сбрасывает пул приложений или веб-сервер? Эти данные будут потеряны
  • Пользователь может загрузить большой файл? Будут загружены большие файлы? Вы должны убедиться, что вы можете справиться требования к памяти

Если это не касается, то не стесняйтесь, чтобы сохранить файл в сессии:

Session["UploadedFile"] = someByteArray; 

Если эти проблемы, то я хотел бы предложить :

  • Сохраните файл на диске и извлекать его, когда вам нужно
  • хранить данные в сессии с базой данных
+0

Для чего мне это решение является наиболее подходящим и попробуем это первым, спасибо! Забыл я мог использовать Session для хранения массива байтов. – user2743684

0

Предполагая, что вы сохраните данные формы из вашей второй формы вместе с путём к сохраненному файлу (или самому двоичному файлу), еще один вариант - сохранить ваши данные дважды.

После загрузки загруженного файла сохраните файл, как вы планировали, и получите идентификатор/ссылку для этой новой записи.

Ваша следующая форма просто сохранит обновленные данные формы для этого же идентификатора.

1

В другом ответе есть несколько отличных объяснений. Я просто хотел что-то добавить.

На первой странице сохраните файл на HD, а также сохраните имя файла/id в базе данных. Теперь у вас есть идентификатор, указывающий на текущее имя загруженного файла. Этот идентификатор может быть передан между страницами с типом = «скрытый» вход или с помощью переменной сеанса.

Если у вас нет базы данных, имя файла может быть идентификатором. ex: сгенерируйте указатель, сохраните имя файла с этим направляющим ex: [guid] .xls

+0

Я действительно считал это, но думал, что это может быть слишком сложный способ его достижения. Похоже, что количество способов достижения этого ограничено, и мне также нравится этот подход. Спасибо – user2743684

+0

@ user2743684 Да ... и при использовании сеансов все хранится на сервере, поэтому, если несколько пользователей помещают информацию в сеансы, она может расти довольно быстро. –

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