4

content-type: image/png のヘッダーを返し、画像を返すだけの python スクリプトを cgi-bin に設定しようとしています。画像を開いて戻そうとしましたが、うまくいきませprint f.read()ん。

編集:私が使用しようとしているコードは次のとおりです:

print "Content-type: image/png\n\n"
with open("/home/user/tmp/image.png", "r") as f:
    print f.read()

これは、ubuntu サーバー 10.04 で apache を使用しています。ページをクロムでロードすると壊れた画像が表示され、ページをFirefoxでロードすると取得されますThe image http://localhost/cgi-bin/test.py" cannot be displayed, because it contains errors.

4

2 に答える 2

7
  1. ファイルを次のように開く必要がある場合があります"rb"(Windows ベースの環境では通常そうです。
  2. 単に印刷するとうまくいかない場合があります (「\n」などが追加されるwriteため) sys.stdout
  3. このステートメントprint "Content-type: image/png\n\n"は実際には 3 つの改行を出力します (print は最後に 1 つの "\n" を自動的に追加するため)。これにより、PNG ファイルが破損する可能性があります。

試す:

sys.stdout.write( "Content-type: image/png\r\n\r\n" + file(filename,"rb").read() )
  1. HTML 応答にはキャリッジ リターンと改行が必要です
于 2010-07-07T19:26:30.323 に答える
0

ヘッダーの後に空白行を含めていますか? そうでない場合、それはヘッダーの終わりではありません!

print 'Content-type: image/png'
print
print f.read()

于 2010-07-07T19:28:29.933 に答える