Загрузить файл, MemoryStream против FileInfo - PullRequest
0 голосов
/ 29 декабря 2011

Я должен сгенерировать несколько файлов в своем веб-приложении asp.net и отправить его клиенту.Поэтому я создал метод, который работает с потоком памяти и отправляет буфер в ответ http.

Он работает нормально, но я просто прочитал другой код, и парень использует fileInfo.Так что, если я правильно понимаю, FileInfo - это «настоящий» файл, записанный на диске сервера.

Так какой же выбор лучший?(если есть) Какие вопросы я должен задать мне?Это о размере файла?

Обратите внимание, что меня не волнует сохранение файла, после его отправки мне не нужно иметь его на сервере.

Ответы [ 2 ]

2 голосов
/ 29 декабря 2011

FileInfo - это только указатель на файл, уже сохраненный в файловой системе. Если вы хотите получить доступ к его содержимому, вам нужно использовать поток. Так что в вашем случае, если вы не хотите сохранять файл на сервере, вы можете использовать MemoryStream и записать его в ответ. Поток также является указателем на некоторые данные. MemoryStream - это указатель на данные, хранящиеся в памяти. Поэтому вам необходимо сначала загрузить эти данные в память.

Лучший способ - напрямую записать объект Response кусками. Таким образом, вам не нужно загружать все содержимое файла в память. Но это будет зависеть от того, как вы генерируете файл.

1 голос
/ 29 декабря 2011

Почему бы не использовать класс FileUpload? Если вам нужен только поток в файл, вы можете использовать свойство FileUpload.FileContent. Но в будущем, если вы заботитесь об этом и хотите сохранить его, это просто FileUpload.SaveAs({path on server}).

Таким образом, вы можете использовать один и тот же класс / элемент управления независимо от ваших потребностей в реализации сейчас или в будущем.

Подробнее о соответствующей статье MSDN .

...