バイナリデータ(Excel XLSファイル)をHTTPマルチパートリクエストの一部として渡すことができるデータに変換しようとしています(複数パートを生成するコードリクエストは文字列データを使用していましたので、要求がどのように形成されているのではないかという問題であるバイナリデータのエンコーディングだと思います)。HTTPリクエスト用のバイナリ(Excel)データを文字列に変換する
decimal hex
Ð 208 D0
Ï 207 CF
17 11
à 224 E0
¡ 161 A1
± 177 B1
26 1A
私はその後、
content.Append(Encoding.UTF8.GetString(element.BinaryContent));
を使用する場合は
binaryContent = System.IO.File.ReadAllBytes(filePath);
を使用してelement.BinaryContent
を設定している:(++メモ帳のビューがとき)ですrefのために
Excelファイルの最初の7つの文字
これは(VSのイミディエイトウィンドウから)HTTP要求コンテンツを作成する場合:
は、アップロードされたファイルでは制御文字と英語の文字が正しく保持されますが、他の文字は正しくない値に変換されます。
私はこれをうまく説明していないのですが、下の図は、左側にアップロードされたデータと右側がオリジナルです。参照のために
、私が作るどのように要求は、これを使用している:requestContent
はこのように、マルチパートの内容を正確に形成された
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);
}
}
:
--------------------------BNDY
Content-Disposition: form-data; name=password
Txxxxx
--------------------------BNDY
Content-Disposition: form-data; name=username
[email protected]
--------------------------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).
何データを元の形式で渡す必要がありますか?
私の知る限り、マルチパートチャンクは、通常、BASE64でエンコードされ – dlatikay