2

私は次のjqueryを持っています:

$(".download").click(function(){     
  $.post('get_bot.php', "url_code="+url_code, function (response) {
    alert(response);
  });
});

url_code は、json 構造の url を持つ変数です。ここに戻りの実際の例があります: https://services.sapo.pt/Codebits/botmake/01,02,03,04,05,06,07, 08,I%20ルール!

これらの数値は、さまざまな画像を生成するためのパラメーターです。

私のget_bot.phpページで私はやっています:

$urlc=$_POST['url_code'];
$bot = file_get_contents($urlc);
header("content-type: image/png");
echo $bot;

.png ファイルのダウンロードとして応答を取得する方法を検討しているため、ユーザーが .download をクリックすると、.png ファイルのダウンロード ウィンドウ プロンプトが表示されます。

正しいURLを渡してfile_get_contentの結果をエコーするとうまくいくようです(ただし、画像を右クリックして保存しようとすると、実際にはphpファイルが保存されます...)

これについての助けは素晴らしいでしょう。私はjson構造の経験があまりありません。これまでのところ、配列構造のみを扱っており、画像出力は扱っていません。

実際の結果を得るにはおそらくここから離れていることは承知していますが、何かポインタをいただければ幸いです。

4

2 に答える 2

4

RFC2616は、何をする必要があるかを説明しています。基本的に、追加する必要があります

Content-Disposition: attachment; filename="fname.ext"

私が間違っていなければヘッダーに。

編集 これはサンプルスクリプトです。セットアップが異なる2つのサーバーでこれが機能することを確認しました。

<?php
  header("content-type: image/jpg");
  header("Content-Disposition: attachment; filename='pic.jpg'");
  readfile('http://lorempixel.com/400/200/');
?>
于 2013-01-23T12:58:29.953 に答える
0

get_bot.php でこの関数を使用するだけで、ファイルをブラウザーに表示する代わりにダウンロードを開始できます (クロスブラウザーで動作するはずです)。

function download($file, $path)
{
    $size = filesize($path.$file);

    @ob_end_clean();

    if(ini_get('zlib.output_compression'))
    ini_set('zlib.output_compression', 'Off');

    header('Content-Type: application/force-download');
    header('Content-Disposition: attachment; filename="'.basename($file).'"');
    header("Content-Transfer-Encoding: binary");
    header('Accept-Ranges: bytes');
    header("Cache-control: no-cache, pre-check=0, post-check=0");
    header("Cache-control: private");
    header('Pragma: private');
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

    if(isset($_SERVER['HTTP_RANGE']))
    {
        list($a, $range) = explode("=",$_SERVER['HTTP_RANGE'],2);
        list($range) = explode(",",$range,2);
        list($range, $range_end) = explode("-", $range);
        $range=intval($range);
        if(!$range_end) {
            $range_end=$size-1;
        } else {
            $range_end=intval($range_end);
        }

        $new_length = $range_end-$range+1;
        header("HTTP/1.1 206 Partial Content");
        header("Content-Length: $new_length");
        header("Content-Range: bytes $range-$range_end/$size");
    } else {
        $new_length=$size;
        header("Content-Length: ".$size);
    }

    $chunksize = 1*(1024*1024);
    $bytes_send = 0;
    if ($file = fopen($path.$file, 'rb'))
    {
        if(isset($_SERVER['HTTP_RANGE']))
        fseek($file, $range);

        while
            (!feof($file) && 
             (!connection_aborted()) && 
             ($bytes_send<$new_length) )
        {
            $buffer = fread($file, $chunksize);
            print($buffer);
            flush();
            $bytes_send += strlen($buffer);
        }
    fclose($file);
    } else die('Error - can not open file.');

die();
}
于 2013-01-23T12:58:40.687 に答える