使用WebImage帮助程序时,HTTP响应看起来像图像数据?

时间:2012-07-15 13:30:38

标签: asp.net-mvc-3

我有一个方法,我通过AJAX从我的MVC3应用程序调用。该方法使用WebImage帮助程序创建图像。创建映像后,然后从控制器返回Json结果。实际返回的内容看起来像图像数据。我在请求的标头中发送的内容类型是json,所以我不确定为什么服务器返回图像数据而不是我的实际json结果。如果我删除WebImage代码,我会得到我正在寻找的实际json结果。

方法示例:

[HttpPost]
public ActionResult CreateTempImage(AvatarUploadModel avatar){

try{

var imageId = Guid.NewGuid();
            var newFileName = imageId + "_" + Path.GetFileName(avatar.FileName);
            var imageTempPath = Server.MapPath("~/Areas/Admin/TemporaryUploads/" + newFileName);
            var image = new WebImage(avatar.FileName).Resize(400, 400, true).Write();
            image.Save(imageTempPath);
return Json(new { success = true }, JsonRequestBehavior.AllowGet);
}
catch(Exception ex){
              return Json(new { success = false}, JsonRequestBehavior.AllowGet);
                   }
}

enter image description here

1 个答案:

答案 0 :(得分:1)

此代码是您的问题

var image = new WebImage(avatar.FileName).Resize(400, 400, true).Write();

记录为......

/// <summary>
/// Renders an image to the browser.
/// </summary>
/// 
/// <returns>
/// The image.
/// </returns>
/// <param name="requestedFormat">(Optional) The file format to use when the image is written.    </param>

反编译它会给出以下代码:

  requestedFormat = requestedFormat ?? this._initialFormat.ToString();
  byte[] bytes = this.GetBytes(requestedFormat);
  string str = !requestedFormat.StartsWith("image/", StringComparison.OrdinalIgnoreCase) ? "image/" + requestedFormat : requestedFormat;
  HttpResponse response = HttpContext.Current.Response;
  response.ContentType = str;
  response.BinaryWrite(bytes);
  return this;

即。它将图像直接写入HttpContext.Current.Response并将ContentType设置为图像的格式。

如果您只想将图像保存到服务器上的文件系统,则可以移除对Write的呼叫,并将其替换为Save的呼叫:

var image = new WebImage(avatar.FileName).Resize(400, 400, true).Save(imageTempPath);

干杯, 迪安