如何将文件转换为二进制格式以便在 POST 请求负载中发送它

How to convert a file into binary format for sending it inside a POST request payload

我正在尝试使用 this API,它可以在不同格式之间转换文件。作为请求的一部分,它需要二进制格式的文件。我试图弄清楚这对 C# 意味着什么。我读过的所有内容都指向使用字节数组,但到目前为止还没有奏效。

基本上,我需要将文档转换为二进制文件,然后使用该原始数据并将其插入负责发送实际 POST 请求的系统的另一部分。

为了更好地理解 API,我测试了端点并查看了请求负载。 Chrome 不显示作为文件字段的一部分发送的原始数据:

Fiddler 有,但它是乱码(可能是因为它试图将字节解释为 ASCII):

所以我有点困惑。对于请求负载中的表单数据对象,我需要对 C# 中的文件做些什么?我试过了(我正在使用该系统的 API 从另一个系统访问文件):

DocumentInfo di = this.BoundEntryInfo as DocumentInfo;
string contentType = "application/msword";
string binaryValue;

using (DocstarReadStream filestream = di.ReadDoc(out contentType)) //open a stream to the word document in the other system
{
    using (MemoryStream mstream = new MemoryStream())
    {
         filestream.CopyTo(mstream);
         binaryValue = string.Join("", mstream.ToArray());
    }
}

生成的 binaryValue 字符串的值如下:

807534200608000330223164210108901003250019082916711111011610111011695841211121011159346120109108321624240160020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018014820311019448166924714925015145183859823216217042213962150458223372412328625314619918825419019...

但是,使用它作为 POST 请求负载中文件字段的值会导致错误请求错误(它说 "conversion error" 所以我假设数据格式错误).

与其将字节数组转换为字符串并将其作为正文发送,不如将字节写入通过您选择的 HttpClient 发送的请求流。内容类型编码期望您将原始二进制数据作为有效负载发送,并且不知道如何处理字符串解释。

这就是为什么 fiddler 中的数据看起来像乱码的原因。如您所料,它是二进制数据的文本表示。