2

サーバーに送信する必要があるbase64でエンコードされた画像があります。私がやること:

string content = (string) someDynamicObjectFromJson;
byte[] imageBytes = Convert.FromBase64String(content); 
var actualImage = new MemoryStream(imageBytes, 0, imageBytes.Length);
long contentLength = imageBytes.Length; // or actualImage.Length

一部の画像では、 にcontent length等しくなり25ます。

しかし、html フォームから同じ画像をアップロードし、HttpPostedFileBaseparam を使用してコントローラー アクションを定義するcontent lengthと、「53219」に等しくなります。

public virtual ActionResult UploadPartyImages(HttpPostedFileBase image)
{
    long contentLength = image.ContentLength; // equals to '34451'
}

そして、これをHttpPostedFileBaseに割り当てることができます: contentLengthHttpWebRequest.ContenLength

request.ContentLength = contentLength;

そして、画像がサーバーにアップロードされます。MemoryStream.Length を割り当てる場合、次のようになります。

トランスポート接続からデータを読み取ることができません: 確立された接続が、ホスト マシンのソフトウェアによって中止されました。

MSDN の説明:

1) HttpPostedFile.ContentLength - ストリームの長さをバイト単位で取得します。
2) MemoryStream.Length - ストリームの長さをバイト単位で取得します。

質問:

1) 説明が同じであるのに、なぜこんなに異なる値 (25 と 53219) が得られるのでしょうか?
2) ContentLengthContent-Length http ヘッダーを設定できるように、MemoryStream (または base64 イメージ) から取得する適切な方法は何ですか?

編集:
ファイルを保存してからFileInfoインスタンスを作成できることを読みました。そして、Length プロパティを呼び出します。しかし、そのようなことを処理するのは適切な方法ではないと思います。

4

0 に答える 0