1

これに似た既存の質問がたくさんありますが、どれも私の問題に答えません。これは、クロムで画像を動的に生成してダウンロードすることに関係しています。php サイトの例を使用します。

http://php.net/manual/en/function.imagejpeg.php

<?php
// Create a blank image and add some text
$im = imagecreatetruecolor(120, 20);
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 1, 5, 5,  'A Simple Text String', $text_color);

// Set the content type header - in this case image/jpeg
header('Content-Type: image/jpeg');

// Output the image
imagejpeg($im);

// Free up memory
imagedestroy($im);
?>

これを「export.php」に入れてリンクすると、期待どおりの画像が得られます。ただし、これをダウンロードにしたいので、ユーザーがリンクをクリックすると、ブラウザに表示されるのではなく、画像がダウンロードされます。これを行う方法は、次のように content- dispositionタグを使用することです。

<?php
// Create a blank image and add some text
$im = imagecreatetruecolor(120, 20);
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 1, 5, 5,  'A Simple Text String', $text_color);

// Set the content type header - in this case image/jpeg
header('Content-Type: image/jpeg');

//This is literally the only line I have added
header('Content-Disposition: attachment; filename="foo.jpg"');    

// Output the image
imagejpeg($im);

// Free up memory
imagedestroy($im);
?>

そして今、画像は(期待どおり)表示されなくなり、クロムを除くすべてのブラウザですべてが機能します。これは、ダウンロードが完了すると(開発ツールによると)画像のダウンロードを「キャンセル」します-Resource interpreted as Document but transferred with MIME type image/jpegコンソールでも文句を言います。

太陽の下ですべての応答ヘッダーを試しましたが、何が間違っていますか?

応答ヘッダー:

 Cache-Control:max-age=0
 Connection:Keep-Alive
 Content-Disposition:attachment; filename="foo.jpg"
 Content-Length:1302
 Content-Type:image/jpeg
 Date:Mon, 14 Oct 2013 09:55:32 GMT
 Expires:Mon, 14 Oct 2013 09:55:32 GMT
 Keep-Alive:timeout=15, max=43
 Server:Apache/2.2.16 (Debian)
 X-Powered-By:PHP/5.3.3-7+squeeze15

編集

ここでは説明を簡略化しようとしましたが、簡略化することで、問題の原因となっている部分を見逃している可能性があります。リンクはいくつかの ajax を開始し、上記のページへの POST を生成します。

4

0 に答える 0