Was ist der beste Weg, um eine Datei (in diesem Fall eine PDF, aber jede Datei wird tun) von einer WebResponse und in einen MemoryStream? Die Verwendung von .GetResponseStream() von WebResponse ruft ein Stream-Objekt ab, aber wenn Sie diesen Stream in einen bestimmten Stream-Typ konvertieren möchten, was tun Sie?Wie lege ich eine WebResponse in einen Speicherstream?
Antwort
Kopiert dies aus dem Web vor einem Jahr oder so.
//---------- 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();
}
fand ich folgende bei 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()
Das ist ein ernsthaft schlampiger Code, den würde ich nie benutzen! – emalamisura
Es ist ein ernstes Problem mit SoloBold des answer, die ich während es Testen entdeckt. Wenn es verwendet wurde, um eine Datei über eine FtpWebRequest
in eine MemoryStream
zu lesen, konnte es zeitweilig nicht den gesamten Strom in den Speicher lesen. Ich verfolgt dies bis Peek()
manchmal -1 nach den ersten 1460 Bytes zurückgegeben, obwohl eine Read()
wäre erfolgreich gewesen (die Datei war deutlich größer als diese).
Stattdessen schlage ich vor, die Lösung unter:
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
Das funktioniert für mich, während die anderen Antworten nicht funktionierten. – Matt
Danke für die Antwort, Lawrence. Ich bekam widersprüchliche Ergebnisse, wenn ich versuchte, dies auf andere Weise zu tun. – Cashley
Wenn Sie sich die von der Methode CopyTo (Stream, Int32) in .NET 4.0 generierte IL (via dotPeek) ansehen, werden Sie feststellen, dass sie Code mit demselben Muster erzeugt, aber eine einzige Codezeile verwendet. https://msdn.microsoft.com/en-us/library/system.io.stream.copyto(v=vs.100).aspx. Antwort.CopytTo (memStream, 1024); memStream.Position = 0; –
- 1. Wie lege ich eine Variable in einen String in Python?
- 2. Wie lege ich einen Primärschlüssel in Sqlite
- 3. Wie lege ich Futures in einen Container?
- 4. einen WebResponse Strom in iframe bekommen - Probleme
- 5. Wie lege ich einen Fortschrittsbalken in eine Anwendung mit Registerkarten
- 6. So konvertieren Sie eine PDF in einen Speicherstream
- 7. Wie lege ich Daten in eine Masterpage?
- 8. Wie wird eine WebResponse-Instanz ordnungsgemäß beseitigt?
- 9. WebResponse eine leere Zeichenfolge Posting
- 10. Wie lege ich eine bedingte Kompiliervariable fest?
- 11. Wie lege ich eine Rückwärtsauswahl fest?
- 12. Wie kann ich ein Paket in einem Speicherstream erstellen?
- 13. Wie lege ich eine Dateierweiterung fest?
- 14. Kann ich eine Bibliothek aus einem Speicherstream laden?
- 15. Wie lege ich einen Rahmen um ein Bild in WPF?
- 16. Wie lege ich den Inhalt eines ByteBuffers in einen OutputStream?
- 17. Wie lege ich einen Pfad in Visual Studio fest?
- 18. Wie lege ich einen Rahmen in WPF fest?
- 19. Wie lege ich eine 'if-Klausel' in eine SQL-Zeichenfolge?
- 20. Wie lege ich eine Schaltfläche in eine Tabellenansichtszelle?
- 21. Wie lege ich einen Fremdschlüssel in SQL Server ab?
- 22. Wie lege ich einen Feldwert in einem C# -Ausdrucksbaum fest?
- 23. Wie lege ich in Powershell eine Umgebungsvariable fest, indem ich den Namen als $ var lege?
- 24. Wie lege ich diesen Code in eine Bibliothek für Codeigniter?
- 25. Wie lege ich eine DataSource auf eine DropDownList fest?
- 26. Wie kann ich in Powershell einen Base64-codierten Speicherstream einer lokalen Zip-Datei erhalten?
- 27. Wie lege ich einen Standardpinsel für SyntaxHighlighter fest?
- 28. Wie lege ich eine Flash-Nachricht in Yii2?
- 29. Wie lege ich eine oberste Variable in Python fest?
- 30. Wie lege ich eine Schriftart in meine iPhone-Anwendung ein?
dies nicht zeigen, wie ein WebResponse in einen Memorystream als das ursprüngliche Plakat setzen gefragt. –