我无法在Asp.net MVC中使用Ajax返回图像文件并在视图中显示它

我无法在Asp.net MVC中使用Ajax返回图像文件并在视图中显示它,ajax,asp.net-mvc,image,Ajax,Asp.net Mvc,Image,它总是属于错误函数。如果我删除了数据类型,那么它就不会落入错误函数中,而是在视图中显示长字符串。为什么这样做不起作用并在视图中显示图像 您将图像的URL与其实际内容(图形字节)混淆 /GetImage调用返回字节,但不能将数据字节放入i.src属性,因为该属性需要提供URL。 如果您忘记了Ajax调用,只使用i.src='/Home/GetImage/'+img您可以执行以下操作: $.ajax({ type: 'GET',

它总是属于错误函数。如果我删除了数据类型,那么它就不会落入错误函数中,而是在视图中显示长字符串。为什么这样做不起作用并在视图中显示图像

您将图像的URL与其实际内容(图形字节)混淆

/GetImage
调用返回字节,但不能将数据字节放入
i.src
属性,因为该属性需要提供URL。

如果您忘记了Ajax调用,只使用
i.src='/Home/GetImage/'+img

您可以执行以下操作:

$.ajax({
                    type: 'GET',
                    dataType: 'image/jpeg',
                    url: '/Home/GetImage/' + img , 
                    success: function (data) {
                        i = new Image();
                        i.src = data;
                        $('#imageresult').append(i);
                    },
                    error: function () {
                        alert('error'); 
                    },
});


[HttpGet]
public ActionResult GetImage(string img)
{
   string imageFile = System.Web.HttpContext.Current.Server.MapPath("~/Profile/Small/" );
   var path = Path.Combine(imageFile, img );  
   var srcImage = Image.FromFile(path);
   var stream = new MemoryStream();
   srcImage.Save(stream, ImageFormat.Jpeg);

   return File(stream.ToArray(), "image/jpeg");
}
还有Ajax调用:

public ActionResult GetImage(string img)
{
   string imageFile = System.Web.HttpContext.Current.Server.MapPath("~/Profile/Small/" );
   var path = Path.Combine(imageFile, img );  
   var srcImage = Image.FromFile(path);
   var stream = new MemoryStream();
   srcImage.Save(stream, ImageFormat.Jpeg);

   return Json(Convert.ToBase64String(stream.ToArray()), JsonRequestBehavior.AllowGet);
}
以及以下观点:

$.ajax({
        type: 'GET',
        url: '@Url.Action("GetImage", "Home")',
        success: function (data) {
            $("#ItemPreview").attr('src', 'data:image/png;base64,' + data);
        },
        error: function () {
            alert('error');
        },
    });


当然,您可以动态地附加
img
,然后绑定它的源代码。

您没有发送任何数据,那么为什么不使用GET而不是POST?Agre,如果您正在使用POST,我想您需要发送一些数据。好的,我将其更改为“获取”,尝试仅发送
bytearray
,然后查看图像<代码>返回Json(stream.ToArray())
我认为这里的错误在于控制器上的属性是
HttpPost
,但是您的ajax调用类型是
GET
。还有一件事为什么
dataType:'image/jpeg'
,您只传递了一个字符串
<img id="ItemPreview" src="" />