我无法在Asp.net MVC中使用Ajax返回图像文件并在视图中显示它
它总是属于错误函数。如果我删除了数据类型,那么它就不会落入错误函数中,而是在视图中显示长字符串。为什么这样做不起作用并在视图中显示图像 您将图像的URL与其实际内容(图形字节)混淆我无法在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',
/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="" />