3

私は次のように動的に生成された画像を自分のページに表示します。

<img id="my_image" src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEA/gD+AAD/etc............" />

ユーザーに画像を右クリックして[保存]をクリックするように指示する代わりに、ダウンロードリンクを公開します。これをクリックすると、画像のダウンロードが求められます。これを達成する方法は?

当初、jsでの私の試みは次のとおりです。

var path = $('#my_image').attr('src');
window.open('./download.php?file=' + path);

そしてdownload.phpで:

<?php
    header('Content-Description: File Transfer');
    header("Content-type: application/octet-stream");
    header("Content-disposition: attachment; filename= " . $_GET['file'] . "");
?>

<img src="<?= $_GET['file'] ?>" />

ただし、問題は、Base64のURL攪拌が非常に大きいため、GETリクエストのバイト制限を超えていることです。

私はJavaScriptまたはPHPのいずれかのソリューションを受け入れています。

4

2 に答える 2

8

download.phpでこれを試してください:

<?php
    header('Content-Description: File Transfer');
    header("Content-type: application/octet-stream");
    header("Content-disposition: attachment; filename= Image.jpg");
    exit(base64_decode($_POST['data'])); //url length is limited, use post instead
?>

そして、これをフォームに使用します。

<form method="post" action="./download.php">
  <input type="hidden" name="data" value="/9j/4AAQSkZJRgABAgEA/gD+AAD/etc............" />
  <a href="#" onclick="this.parentNode.submit();return false;">Download</a>
</form>

ダゴンが言ったように、フォームを送信することは画像全体をアップロードするようなものであるため、これは最善の方法ではありません。

于 2012-08-21T03:14:17.253 に答える
2

他の質問の1つに答えがあったことがわかりました:

ブラウザ/HTMLsrc= "data:image / jpeg;base64..."から画像を強制的にダウンロードします

私は次のようにクライアントsdeで厳密にそれを行っています:

$('a#download_image').on('click', function() {
    var url = $('#my_image').attr('src').replace(/^data:image\/[^;]/, 'data:application/octet-stream');
    location.href = url;
});
于 2012-08-22T01:46:02.397 に答える