【发布时间】:2017-07-28 01:26:39
【问题描述】:
我正在尝试将二进制数据(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 中的即时窗口):
在上传的文件中,控制字符和英文字符被正确保留,但其他字符被转换为错误的值。
如果我没有很好地解释这一点,下图显示了左侧上传的数据和右侧的原始数据。
对于参考,我如何提出请求是使用这个:
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).
我需要做什么才能以原始格式传递数据?
【问题讨论】:
-
AFAIK,多部分块通常使用 base64 编码
标签: c# http encoding character-encoding binary