无法将HttpPostedFileBase转换为Byte []

亚历克斯

我有一个采用HttpPostedFileBase(.jpg或.png等)的控制器。

public ActionResult SaveImage(HttpPostedFileBase ImageData)
{
  //code
}

ImageData成为System.Web.HttpPostedFileWrapper具有以下属性对象:

ContentLength: 71945
ContentType: "image/png"
FileName: "foo.png"
InputStream: {System.Web.HttpInputStream}

使用ImageData并将其转换为Image,然后将Image转换为byte [],然后转换为base64字符串,我没有任何问题-但我尝试使用以下代码将其直接转换为byte []:

byte[] imgData;

using (Stream inputStream = ImageData.InputStream)
{
    MemoryStream memoryStream = inputStream as MemoryStream;
    if (memoryStream == null)
    {
        memoryStream = new MemoryStream();
        inputStream.CopyTo(memoryStream);
    }

    imgData = memoryStream.ToArray();
}

memoryStreamimgData = memoryStream.ToArray();调用时始终为空,因此imgData最终也为null。

我很难理解为什么我不能将此InputStream读入MemoryStream。InputStream看起来不错,但readTimeout和writeTimeout属性throwing除外timeouts are not supported on this stream我在做什么错,为什么我不能将ImageData转换为byte []?

以防万一,这是我的AJAX电话。contentTypeprocessData选项设置为false可能会引起问题吗?

$.ajax({
    url: 'SaveImage',
    data: formData,
    type: "POST",
    contentType: false,
    processData: false,
    beforeSend: function () {
        $("#loadingScreenModal").modal('toggle');
    },
    success: function (data) {
        // etc.
    }
});

更新:我通过将转换HttpPostedFileBaseImage,然后将转换为Image解决了该问题byte[],但是我仍然对弄清楚为什么必须执行此中间步骤很感兴趣。

Image i = Image.FromStream(ImageData.InputStream, true, true);
byte[] imgData = imageToByteArray(thumb);

public byte[] imageToByteArray(Image imageIn)
{
    MemoryStream ms = new MemoryStream();
    imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
    return ms.ToArray();
}

更新#2:我认为这可能是因为我的代码存在问题是该if (memoryStream == null)内的代码从未被调用过。

亚历克斯

memoryStream == null正如JoeEnos的建议,答案最终就是检查。MemoryStream在此检查正上方的行上实例化了-因此它永远不能为null-并应使用进行检查if (memoryStream.Length == 0)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用C#将byte []转换为HttpPostedFileBase

来自分类Dev

无法将HttpPostedFileBase对象转换为字节数组

来自分类Dev

将图片网址转换为HttpPostedFileBase

来自分类Dev

将图片网址转换为HttpPostedFileBase

来自分类Dev

无法将List <Moq.Mock <System.Web.HttpPostedFileBase >>转换为List <System.Web.HttpPostedFileBase>

来自分类Dev

HttpPostedFileBase转换为HttpPostedFile

来自分类Dev

错误:无法将参数值从 SqlBinary 转换为 Byte[]

来自分类Dev

无法从int转换为byte

来自分类Dev

如何将httppostedfilebase转换为String数组

来自分类Dev

将HttpPostedFileBase-pdf类型转换为png / jpg类型

来自分类Dev

如何将HTTPPostedFileBase转换为Google Drive API文件

来自分类Dev

将Byte []转换为Double

来自分类Dev

将byte []转换为BitSet

来自分类Dev

将byte []转换为位图

来自分类Dev

将byte []转换为JsonObject

来自分类Dev

将int转换为byte []

来自分类Dev

将byte []转换为sbyte []

来自分类Dev

将byte []转换为位图

来自分类Dev

将 byte[] 转换为 SAFEARRAY

来自分类Dev

将BYTE *转换为Array <byte> ^

来自分类Dev

将byte []转换为Emgu / OpenCV映像

来自分类Dev

UnsupportedOperationException,将byte []转换为float []

来自分类Dev

将BYTE数组转换为INT

来自分类Dev

将long转换为byte数组

来自分类Dev

将Object []转换为byte []时出错

来自分类Dev

在保存之前将pdf转换为byte []

来自分类Dev

将Blob从oracle转换为byte []

来自分类Dev

将Go [] byte转换为C * char

来自分类Dev

使用PDFBox将图像转换为byte []