2011-08-12 12 views
2

イメージは、少数のユーザー入力パラメーターで動的に生成されます。私は正常にいくつかの追加のパラメータがあります

$('#myImage').attr('src', 'Images/GetImage?param1=value1&param2=value2'); 

Response.OutputStreamに書き込むことによって、をGET を介して画像を生成することができますよ。しかし、POSTでどうすればいいですか?私は$.ajaxを使用し、base64はImageをエンコードすると考えましたが、それはうまくいきません。

$.ajax({ 
    url: 'Images/GetImage64', 
    type: 'POST', 
    data: { param1: 'value1', param2: 'value2' }, 
    success: function (data) { 
     //$('#myImage').attr('src', data); 
     $('#myImage').attr('src', 'data:image/png;base64, ' + data); 
    } 
}); 

クロームのdevのツールtext/plainのレスポンスと/画像/ GetImage64にアヤックス(XHR)POSTを示しています。コンテンツは、サーバー上で生成されたPNGのように見えます。しかし、別の「その他」の要求は、以下のURLで作られた、と私は、サーバー上で

data:image/png:base64, [binary] 

に何が起こっているのか見当がつかないが、私はExecuteResultや画像をbase64エンコードとレスポンスをオーバーライドするImageResult : ActionResultを返しています。

public override void ExecuteResult(ControllerContext context) 
{ 
    context.HttpContext.Response.Clear(); 
    context.HttpContext.Response.ContentType = "text/plain"; 
    context.HttpContext.Response.BinaryWrite(GetBase64Image(Image)); 
} 
+0

URLに 'data ... 'という別のリクエストがある場合、何らかの理由でchromeがデータURLを画像のsrcとして動的に設定することを許可していません。 'http://example.com/data:image/.... 'のリクエストをしています。 –

+0

@Marc B Firefox 5とIE9は同様に動作します。それにもかかわらず、私のイメージはレンダリングされません。 –

+0

この[blog post](http://onwebdev.blogspot.com/2011/03/jquery-data-urls-and-ajax.html)は動作するはずですが、 pngの代わりにgifを使用します。たぶん、base64データをキャプチャしてバイナリにデコードしてみてください。おそらく、実際のpngデータが 'src'設定を破る前に出力が破損している可能性があります。 –

答えて

1

jQueryの不具合がある可能性があります。 dataType: 'text'とプレーンテキストとして結果を処理するためのjQueryを強制的に試してみてください。

$.ajax({ 
    url: 'Images/GetImage64', 
    type: 'POST', 
    dataType: 'text', 
    data: { param1: 'value1', param2: 'value2' }, 
    success: function (data) { 
     $('#myImage').attr('src', 'data:image/png;base64,' + data); 
    } 
}); 

編集:ネヴァーマインド、それはありませんでした。

+0

ありがとうございましたが、それは私のエンコーディングであった - 私はクライアントに正しいバイト配列を送信していませんでした –

関連する問題