0

I am building an application where I need to build post data manually. But in this post data, there is an image binary data. So before posting it, the post data should look like this:

------------------------------8cc097679560ebc
Content-Disposition: form-data; name="mode";

test
------------------------------8cc097679560ebc
Content-Disposition: form-data; name="cropped";

false
------------------------------8cc097679560ebc
Content-Disposition: form-data; name="Image"; filename="C:\Temp\image_front1.jpg" Content-Type: application/octet-stream

…binary data…

Everything here is built using simply StringBuilder.

We are working with multi-tiered applications. This is how I convert an Image into Base64String to pass it along to the final tier:

Dim image As Image = image.FromFile("samplecheck.jpg")
Dim stream As New System.IO.MemoryStream
image.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg)
oDeposit.Image = Convert.ToBase64String(stream.ToArray())

which works fine I believe and then in the final tier where the post data is being built:

oPostData.Append(Encoding.ASCII.GetString(Convert.FromBase64String(ImageData)))

As you can see the ContentType should be octet-stream but I am getting API specific error which I am thinking because of the all these binary conversion stuff but I need to confirm all these steps I showed you is correct. Any suggestions?

Note: You may wonder why I am doing this like that but it is their stupid API's fault and now I have to follow it.

Tarik
  • 79,711
  • 83
  • 236
  • 349

1 Answers1

1

There are a couple of problems with your code:

  1. You shouldn't use a StringBuilder to store binary data. You need to use one of the raw byte writers.
  2. Convert.FromBase64String returns a byte[], but it's not a byte array of ASCII data. Therefore you shouldn't call Encoding.ASCII.GetString

Take a look at this other question to see how to build this POST data using the correct binary writers: Upload files with HTTPWebrequest (multipart/form-data)

Community
  • 1
  • 1
David
  • 34,223
  • 3
  • 62
  • 80