我正在与HttpWebRequest一起发送文件。我的文件将来自FileUpload UI。在这里,我需要将文件上传转换为文件流,以便与HttpWebRequest一起发送流。如何将FileUpload转换为文件流?
答案 0 :(得分:26)
由于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();
}
}
答案 1 :(得分:11)
最好将输入流直接传输到输出流:
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();
}
这将更有效率,因为您将直接将输入文件流式传输到目标主机,而无需先在内存或磁盘上进行缓存。
答案 2 :(得分:3)
您无法将FileUpload转换为FileStream。但是,您可以从FileUpload的PostedFile属性中获取MemoryStream。然后,您可以使用该MemoryStream来填充您的HttpWebRequest。
答案 3 :(得分:3)
您可以使用path="."
(Tech Jerk的简化回答)将FileUpload文件直接放入MemoryStream
FileBytes
或者如果您不需要memoryStream
using (MemoryStream ms = new MemoryStream(FileUpload1.FileBytes))
{
//do stuff
}