我有一个 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
可以将其分配contentLength
给HttpWebRequest.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 属性。但我认为这不是处理此类事情的正确方法。