Mats Hofman
Mats Hofman

Reputation: 7240

C# How to copy a stream into a streamwriter

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

Answers (1)

Mats Hofman
Mats Hofman

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

Related Questions