0

MVC3 アプリケーションから AJAX 経由で呼び出しているメソッドがあります。このメソッドは、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 に答える