javascript - WebページのSQL DB BLOBから画像をロードする - コードログ


blob jpeg 画像データを格納するフィールドを持つデータベースがあります (例: FFD8FFE00010...)。データを問題なく抽出し、バイト配列と base64 文字列に変換できます。しかし、画像が表示されると、画像の半分以下になります。変換の多くが画像を切り取っているようです.

これは私が使ってきたもののサンプルです:

$.ajax({
        url: "../queries/getContactImage.ashx",
        contentType: "application/json; charset=utf-8",
        cache: false,
        dataType: "json",
        data: {
            iID: pID
        },
        responseType: "json",
        success: function (response) {

            // Loop Through Values And Build String
            if (response.length != 0) {
                $.each(response.aaData, function (index, row) {

                    // CONVERT BLOB TO BYTE[] ARRAY
                    var buffer = [];
                    for (var i = 0; i < row.cPHOTO.length / 2 - 1; i++) {
                        var twoByte = row.cPHOTO.substring((i * 2), (i * 2) + 2);
                        buffer.push(parseInt(twoByte, 16));
                    }
                    console.log(buffer);    

                    // CONVERT TO BASE64STRING
                    var binary = '';
                    var bytes = new Uint8Array(buffer);
                    var len = bytes.byteLength;
                    for (var i = 0; i < len; i++) {
                        binary += String.fromCharCode(bytes[i]);
                    }
                    var base64String = window.btoa(binary);

                    // THIS ONLY DISPLAYS PART OF THE IMAGE ...
                    $("#lstPicture").append("<img src='data:Image/jpeg;base64," + base64String + "' class='img-responsive pic-bordered'/></img>");

                });
            }

        },
        error: function () {
            alert('Contact Image Cannot Be Retrieved.');
        },
    });

画像全体を表示するにはどうすればよいですか?問題はありますかサイズ制限?

-編集-

サーバーに変換しようとしましたが (以下のコード)、画像が途切れていました..

Byte[] bytes = new Byte[rdr["cPhoto"].ToString().Length / 2 ]; 
for (int i = 0; i < bytes.Length; i++) { 
    bytes[i] = Convert.ToByte(rdr["cPhoto"].ToString().Substring(i * 2, 2), 16); 
} 
results.cPHOTO = Convert.ToBase64String(bytes);


------------に答える------------

データを base64 に変換する関数を探している場合は、btoa(..) 関数を使用します。 window オブジェクトを通じてグローバルに利用できます。

btoa('hello')
// => "aGVsbG8="

atob('aGVsbG8=')
// => "hello"

この例が示すように、atob(..) は btoa(..) の逆を行います。 MDN のドキュメントへのリンクは次のとおりです。



>------------に答える------------

http://www.aspsnippets.com/Articles/Save-and-retrieve-BLOB-images-from-MySql-Database-in-ASPNet-C-and-VBNet.aspx

これを参照してください。これはこの問題を解決するのに役立ち、Handler を使用せずに達成できると思います。

タグ:

関連記事:

ページネーション - ページ & ページにページ番号を追加する方法Joomlaのブラウザタイトル?

iis: + 文字を含む URL の IIS7 URL 書き換えブレーク