如何将文件转换为二进制格式,以便在POST请求有效负载内发送

时间:2016-09-10 01:26:41

标签: c# convertapi

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

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

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

Request Payload Screenshot

Fiddler确实如此,但这是胡言乱语(可能是因为它试图将字节解释为ASCII):

enter image description here

所以我有点困惑。出于请求有效负载中的表单数据对象的目的,我需要对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请求有效内容中的文件字段的值会导致错误请求错误(它表示“转换错误”,因此我假设数据的格式错误以某种方式)。

1 个答案:

答案 0 :(得分:1)

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

这就是为什么fiddler中的数据看起来像胡言乱语。正如您所怀疑的那样,它是二进制数据的文本表示。