0

我正在构建一个需要手动构建发布数据的应用程序。但是在这个帖子数据中,有一个图像二进制数据。所以在发布之前,发布的数据应该是这样的:

------------------------------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 的错,现在我必须遵循它。

4

1 回答 1

1

您的代码有几个问题:

  1. 您不应该使用 aStringBuilder来存储二进制数据。您需要使用其中一种原始字节编写器。
  2. Convert.FromBase64String返回 a byte[],但它不是 ASCII 数据的字节数组。因此你不应该打电话Encoding.ASCII.GetString

看看这个其他问题,看看如何使用正确的二进制编写器构建这个 POST 数据:Upload files with HTTPWebrequest (multipart/form-data)

于 2012-10-02T21:11:52.203 回答