我有一个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属性。但我认为这不是处理这类事情的正确方法。