FileUpload для FileStream
Я отправляю файл вместе с HttpWebRequest. Мой файл будет из пользовательского интерфейса FileUpload. Здесь мне нужно преобразовать загрузку файлов в stream для отправки streamа вместе с HttpWebRequest. Как преобразовать FileUpload в stream?
- «Формат данного пути не поддерживается».
- Как превратить String в InputStreamReader в java?
- Буферизованные файлы (для более быстрого доступа к диску)
- Можете ли вы объяснить концепцию streamов?
- Уничтожить stream массива json по одному элементу за раз
- Завершить все предыдущие действия
- Утилизирует ли stream streamreader stream streamа?
- Как создать 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;