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 表单上传相同的图像并使用HttpPostedFileBase参数定义控制器操作时,我得到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)从 MemoryStream(或 base64 图像)
获取的正确方法是什么,以便我可以设置 Content-Length http 标头?ContentLength

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

4

0 回答 0