Reputation: 7240
I want to copy the content of a Stream
(containing an image) into the a StreamWriter
(where I'm writing a webrequest), so far I'm unable to do this.
I tried imageStream.CopyTo(streamWriter);
but that didn't work because it can only copy it to another Stream and not a StreamWriter.
I hope some can help me!
EDIT: CODE ADDED
request.BeginGetRequestStream((requestResult =>
{
Stream stream = request.EndGetRequestStream(requestResult);
using (StreamWriter streamWriter = new StreamWriter(stream))
{
streamWriter.WriteLine(boundary);
streamWriter.WriteLine("Content-Disposition: form-data; name=\"json\"");
streamWriter.WriteLine("Content-Type: text/plain; charset=utf-8");
streamWriter.WriteLine("Content-Transfer-Encoding: 8bit");
streamWriter.WriteLine(json);
streamWriter.WriteLine(boundary);
streamWriter.WriteLine("Content-Disposition: form-data; name=\"image\"; filename=\"image.jpg\"");
streamWriter.WriteLine("Content-Type: application/octet-stream");
streamWriter.WriteLine("Content-Transfer-Encoding: binary");
streamWriter.WriteLine("");
streamWriter.Flush();
image.CopyTo(streamWriter.BaseStream);
// image.CopyTo(stream); // also not working
streamWriter.WriteLine("");
streamWriter.WriteLine(boundary);
streamWriter.Close();
}
ExecuteRequest(this, request);
}), request);
Upvotes: 3
Views: 14353
Reputation: 7240
Thnx to @decyclone I had to use streamWriter.BaseStream
and important is also to use Stream.Flush() before this otherwise it will be written in the wrong order.
request.BeginGetRequestStream((requestResult =>
{
using (StreamWriter streamWriter = new StreamWriter(request.EndGetRequestStream(requestResult)))
{
streamWriter.WriteLine(boundary);
streamWriter.WriteLine("Content-Disposition: form-data; name=\"json\"");
streamWriter.WriteLine("Content-Type: text/plain; charset=utf-8");
streamWriter.WriteLine("Content-Transfer-Encoding: 8bit");
streamWriter.WriteLine(json);
streamWriter.WriteLine(boundary);
streamWriter.WriteLine("Content-Disposition: form-data; name=\"image\"; filename=\"image.jpg\"");
streamWriter.WriteLine("Content-Type: application/octet-stream");
streamWriter.WriteLine("Content-Transfer-Encoding: binary");
streamWriter.WriteLine("");
streamWriter.Flush();
streamWriter.CopyTo(stream.BaseStream);
streamWriter.WriteLine("");
streamWriter.WriteLine(boundary);
streamWriter.Close();
}
ExecuteRequest(this, request);
}), request);
Upvotes: 2