FileUpload для FileStream

Я отправляю файл вместе с HttpWebRequest. Мой файл будет из пользовательского интерфейса FileUpload. Здесь мне нужно преобразовать загрузку файлов в stream для отправки streamа вместе с HttpWebRequest. Как преобразовать FileUpload в stream?

Поскольку FileUpload.PostedFile.InputStream дает мне Stream, я использовал следующий код для преобразования его в массив байтов

public static byte[] ReadFully(Stream input) { byte[] buffer = new byte[input.Length]; //byte[] buffer = new byte[16 * 1024]; using (MemoryStream ms = new MemoryStream()) { int read; while ((read = input.Read(buffer, 0, buffer.Length)) > 0) { ms.Write(buffer, 0, read); } return ms.ToArray(); } } 

Может быть лучше подключить входной stream непосредственно к streamу вывода:

 inputStream.CopyTo(outputStream); 

Таким образом, вы не кэшируете весь файл в памяти перед повторной передачей. Например, вот как вы могли бы записать его в FileStream:

 FileUpload fu; // Get the FileUpload object. using (FileStream fs = File.OpenWrite("file.dat")) { fu.PostedFile.InputStream.CopyTo(fs); fs.Flush(); } 

Если вы хотите записать его прямо в другой веб-запрос, вы можете сделать следующее:

 FileUpload fu; // Get the FileUpload object for the current connection here. HttpWebRequest hr; // Set up your outgoing connection here. using (Stream s = hr.GetRequestStream()) { fu.PostedFile.InputStream.CopyTo(s); s.Flush(); } 

Это будет более эффективно, так как вы будете напрямую передавать исходный файл на целевой хост без предварительного кэширования в памяти или на диске.

Вы не можете преобразовать FileUpload в FileStream. Тем не менее, вы можете получить MemoryStream из этого свойства FileUpload’s FileFile. Затем вы можете использовать этот MemoryStream для заполнения вашего HttpWebRequest.

Вы можете поместить файл FileUpload непосредственно в MemoryStream с помощью FileBytes (упрощенный ответ от Tech Jerk)

 using (MemoryStream ms = new MemoryStream(FileUpload1.FileBytes)) { //do stuff } 

Или, если вам не нужен memoryStream

 byte[] bin = FileUpload1.FileBytes; 
  • Каков наилучший способ чтения GetResponseStream ()?
  • Как клонировать InputStream?
  • Не удалось прочитать InputStream из Java Process (Runtime.getRuntime (). Exec () или ProcessBuilder)
  • Есть ли способ закрыть StreamWriter без закрытия BaseStream?
  • Прочитайте файл / URL-адрес по строке в Swift
  • Как конвертировать Reader в InputStream и Writer в OutputStream?
  • Установка внутреннего буфера, используемого стандартным streamом (pubsetbuf)
  • Редактирование определенной строки текстового файла в C #
  • Разница между fprintf, printf и sprintf?
  • Как импортировать сохраненный поезд модели Tensorflow с использованием tf.estimator и предсказать входные данные
  • Печать Runtime exec () OutputStream для консоли
  • Давайте будем гением компьютера.