サーバーに送信する必要がある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 フォームから同じ画像をアップロードし、HttpPostedFileBase
param を使用してコントローラー アクションを定義するcontent length
と、「53219」に等しくなります。
public virtual ActionResult UploadPartyImages(HttpPostedFileBase image)
{
long contentLength = image.ContentLength; // equals to '34451'
}
そして、これをHttpPostedFileBase
に割り当てることができます: contentLength
HttpWebRequest.ContenLength
request.ContentLength = contentLength;
そして、画像がサーバーにアップロードされます。MemoryStream.Length を割り当てる場合、次のようになります。
トランスポート接続からデータを読み取ることができません: 確立された接続が、ホスト マシンのソフトウェアによって中止されました。
MSDN の説明:
1) HttpPostedFile.ContentLength - ストリームの長さをバイト単位で取得します。
2) MemoryStream.Length - ストリームの長さをバイト単位で取得します。
質問:
1) 説明が同じであるのに、なぜこんなに異なる値 (25 と 53219) が得られるのでしょうか?
2) ContentLength
Content-Length http ヘッダーを設定できるように、MemoryStream (または base64 イメージ) から取得する適切な方法は何ですか?
編集:
ファイルを保存してからFileInfo
インスタンスを作成できることを読みました。そして、Length プロパティを呼び出します。しかし、そのようなことを処理するのは適切な方法ではないと思います。