0

我有一个通过 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);
                   }
}

在此处输入图像描述

4

1 回答 1

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);

干杯,院长

于 2012-07-15T14:00:06.177 回答