从WebResponse获取文件(在这种情况下为.PDF,但是任何文件都可以)并将其放入MemoryStream的最佳方法是什么?从WebResponse使用.GetResponseStream()获取一个Stream对象,但是如果要将该Stream转换为特定类型的流,该怎么办?
最佳答案
我在测试SoloBold的answer时遇到了一个严重问题。当使用它通过FtpWebRequest
将文件读取为MemoryStream
时,它间歇性地无法将整个流读取到内存中。我跟踪到Peek()
,有时在前1460个字节后返回-1,即使Read()
成功了(文件比这个大得多)。
相反,我提出以下解决方案:
MemoryStream memStream;
using (Stream response = request.GetResponseStream()) {
memStream = new MemoryStream();
byte[] buffer = new byte[1024];
int byteCount;
do {
byteCount = stream.Read(buffer, 0, buffer.Length);
memStream.Write(buffer, 0, byteCount);
} while (byteCount > 0);
}
// If you're going to be reading from the stream afterwords you're going to want to seek back to the beginning.
memStream.Seek(0, SeekOrigin.Begin);
// Use memStream as required