tags:

views:

1735

answers:

3

What is the best way to get a file (in this case, a .PDF, but any file will do) from a WebResponse and put it into a MemoryStream? Using .GetResponseStream() from WebResponse gets a Stream object, but if you want to convert that Stream to a specific type of stream, what do you do?

+6  A: 

To convert the response stream to a memory stream:

MemoryStream m = new MemoryStream();
Stream receiveStream = myHttpWebResponse.GetResponseStream();
using (StreamReader sr = new StreamReader(receiveStream)) 
{
    while (sr.Peek() >= 0) 
    {
       memStream.WriteByte((byte)sr.Read());
    }
}

myHttpWebResponse.Close();

References

SoloBold
ToArray doesn't appear to be a member of System.IO.Stream.
doh! just a sec...
SoloBold
A: 

Copied this from the web a year or so ago. //---------- Start HttpResponse if(objHttpWebResponse.StatusCode == HttpStatusCode.OK) { //Get response stream objResponseStream = objHttpWebResponse.GetResponseStream();

    //Load response stream into XMLReader
    objXMLReader = new XmlTextReader(objResponseStream);

    //Declare XMLDocument
    XmlDocument xmldoc = new XmlDocument();
    xmldoc.Load(objXMLReader);

    //Set XMLResponse object returned from XMLReader
    XMLResponse = xmldoc;

    //Close XMLReader
    objXMLReader.Close();
   }

   //Close HttpWebResponse
   objHttpWebResponse.Close();
  }
A: 

I found the following at http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/eeeefd81-8800-41b2-be63-71acdaddce0e/

    Dim request As WebRequest
    Dim response As WebResponse = Nothing
    Dim s As Stream = Nothing
    Dim fs As FileStream = Nothing
    Dim file As MemoryStream = Nothing

    Dim uri As New Uri(String.Format("http://forums.microsoft.com/forums/ShowPost.aspx?PostID=2992978&SiteID=1"))
    request = WebRequest.Create(uri)
    request.Timeout = 10000
    response = request.GetResponse
    s = response.GetResponseStream

    '2 - Receive file as memorystream
    Dim read(256) As Byte
    Dim count As Int32 = s.Read(read, 0, read.Length)
    File = New MemoryStream
    Do While (count > 0)
        File.Write(read, 0, count)
        count = s.Read(read, 0, read.Length)
    Loop
    File.Position = 0
    'Close responsestream
    s.Close()
    response.Close()

    '3 - Save file
    fs = New FileStream("c:\test.html", FileMode.CreateNew)
    count = file.Read(read, 0, read.Length)
    Do While (count > 0)
        fs.Write(read, 0, count)
        count = file.Read(read, 0, read.Length)
    Loop
    fs.Close()
    File.Close()