0

REST Web サービスからバイナリ データをフェッチして、イメージ タグ src を動的に設定しようとしています。私のリンクは myhost:port/docId/imageId/file のようなもので、「application/octet-stream」のコンテンツ タイプを返し、datatType はバイナリです。私のアプローチは、このバイナリ データを取得し、base64 でエンコードして (jquery.base64.js を使用)、base64 でエンコードされたデータを src に入れることです。一部のコード部分は次のとおりです。

            $.ajax({
          url: " myhost:port/docId/imageId/file ",
          datatype: "binary",
          beforeSend: function (xhr) {
              xhr.overrideMimeType("text/plain; charset=x-user-defined");
          },
          success: function(image){
              var imgBase64 = $.base64.encode(image);
              return  imgBase64  ;
          },
          error: function(xhr, text_status){
              console.log("An error again " + text_status);
          }
    });

私が取った別の単純なAJAXアプローチは次のとおりです。

  req.open('GET', " myhost:port/docId/imageId/file" , false);
  req.overrideMimeType('text\/plain; charset=x-user-defined');
  if (req.status != 200){
          console.log("Status code not 200");
          return '';
      }
  return req.responseText;

MIME タイプを上書きしています。そうしないと、GET はステータス 200 OK を示していますが、フェッチで何らかのエラーがスローされます。今、私は base64 エンコーディング "req.responseText" [var imgBase64 = $.base64.encode( req.responseText );] を画像の src に入れています。

これは、base64 データを img に入れる方法です: var imageSource = "data:image/png;base64," + imgBase64 ; $('#imageId').attr('src', imageSource);
ただし、どちらの場合もエンコード中にjquery base64が例外「INVALID_CHARACTER_ERR: DOM Exception 5」をスローしています。base64 データを src に入れるときにこの例外を抑制して強制的にエンコードしても、Firebug で破損したデータが表示されます。私の感覚では、MIME タイプをオーバーライドしているため、バイナリ データのエンコーディングが何らかの形で改ざんされているため、base64 エンコーディング中にいくつかの問題が発生しています。

REST APIから画像(jpeg/png/gif/時々tif)ファイルを取得する方法を示すことができますか?

4

1 に答える 1