为什么MemoryStream.Length(或byte [] .length)与C#中的HttpPostedFile.ContentLength不同?

时间:2013-09-28 06:24:40

标签: c# asp.net image stream memorystream

我有一个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 - 以字节为单位获取流的长度。

Qustions:

1)如果描述相同,为什么我会得到如此不同的值(25和53219)? 2)从MemoryStream(或base64图像)获取ContentLength的正确方法是什么,以便我可以设置Content-Length http标头?

编辑:
我已经读过我可以保存文件然后创建FileInfo实例。并调用Length属性。但我认为这不是处理这类事情的正确方法。

0 个答案:

没有答案