我正在构建一个我需要手动构建帖子数据的应用程序。但是在这篇帖子数据中,有一个图像二进制数据。所以在发布之前,帖子数据应如下所示:
------------------------------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…
这里的所有内容都只使用StringBuilder
构建。
我们正在使用多层应用程序。这就是我将图像转换为Base64String
以将其传递到最终层的方式:
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())
我认为工作正常,然后在构建帖子数据的最后一层:
oPostData.Append(Encoding.ASCII.GetString(Convert.FromBase64String(ImageData)))
正如您所看到的,ContentType
应该是octet-stream
,但由于所有这些二进制转换内容我正在考虑API特定错误,但我需要确认我向您展示的所有这些步骤是正确的。有什么建议?
注意:您可能想知道为什么我这样做,但这是他们愚蠢的API的错误,现在我必须遵循它。
答案 0 :(得分:1)
您的代码存在一些问题:
StringBuilder
来存储二进制数据。您需要使用其中一个原始字节编写器。Convert.FromBase64String
返回byte[]
,但它不是ASCII数据的字节数组。因此,您不应该致电Encoding.ASCII.GetString
看一下这个问题,看看如何使用正确的二进制编写器构建这个POST数据:Upload files with HTTPWebrequest (multipart/form-data)