gpt4 book ai didi

c# - 将二进制 (Excel) 数据转换为 HTTP 请求的字符串

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:25:23 25 4
gpt4 key购买 nike

我正在尝试将二进制数据(一个 Excel XLS 文件)转换为我可以作为 HTTP 多部分请求的一部分传递的数据(生成多部分请求的代码已经使用字符串数据一段时间了,所以我认为问题在于二进制数据的编码,而不是请求的形成方式。

对于 ref,Excel 文件的前七个字符(在 Notepad++ 中查看时)是:

    decimal hex
Ð 208 D0
Ï 207 CF
17 11
à 224 E0
¡ 161 A1
± 177 B1
26 1A

我正在使用

设置 element.BinaryContent
binaryContent = System.IO.File.ReadAllBytes(filePath);

如果我然后使用

content.Append(Encoding.UTF8.GetString(element.BinaryContent));

创建这给出的 HTTP 请求内容(从 VS 中的立即窗口):

binary content converted to UTF8

在上传的文件中,控制字符和英文字符被正确保留,但其他字符被转换为不正确的值。

如果我没有解释清楚,下图显示左侧是上传的数据,右侧是原始数据。

Comparison of files: before and after upload

对于 ref,我是如何发出请求的:

    protected static void SetRequestContent(string requestContent, HttpWebRequest request, string contentType)
{
request.ContentType = contentType;

byte[] byteData = UTF8Encoding.UTF8.GetBytes(requestContent);

using (Stream postStream = request.GetRequestStream())
{
postStream.Write(byteData, 0, byteData.Length);
}
}

其中 requestContent 具有正确格式的多部分内容,如下所示:

--------------------------BNDY
Content-Disposition: form-data; name=password
Txxxxx
--------------------------BNDY
Content-Disposition: form-data; name=username
a@b.com
--------------------------BNDY
Content-Disposition: form-data;name=\"FILE\";filename=\"c:/POSTOutput/Upload.xls\"
��\u0011\u0871\u001a�\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0>\0\u0003\0��\t\0\u0006\0\0\0\0\0\0\0\0\0\0\0\u0001\0\0\0\u0001\0\0\0\0\0\0\0\0\u0010\0\0\u0002\0\0\0\u0001\0\0\0����\0\0\0\0\0\0\0\0������������ (etc).

我需要做什么才能以原始格式传递数据?

最佳答案

你的代码行

content.Append(Encoding.UTF8.GetString(element.BinaryContent));

假设任意字节序列(来自没有固有字符编码的二进制文件)总是可以转换为 Unicode 字符串。事实并非如此:documentation - 未定义的代码点可能会导致替换(回退)甚至导致 ArgumentException

如果您必须有一个字符串,请改用像 base64 这样的可靠编码:

content.Append(Convert.ToBase64String(element.BianryContent));

更好的是:使用子部分的 type 属性指定 MIME 类型(xls 为 application/vnd.ms-excel,xlsx 不同),因此您根本不需要编码,并将原始字节序列直接提交给流。

引用资料:
- Using HttpWebRequest to POST data/upload image using multipart/form-data

关于c# - 将二进制 (Excel) 数据转换为 HTTP 请求的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42655057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com