PythonのCGIでバイナリファイルを扱う場合の注意

PythonのCGIでバイナリファイルを扱う場合はprintで改行コードが追加されることに注意してください。

具体的には

print(open('/path/to/file', 'rb').read())

のようなスクリプト書いてファイルをダウンロードさせようとすると、元のファイルより1バイト分大きなファイルになってしまいます。

修正は例えば次のような感じです。

sys.stdout.write(open('/path/to/file', 'rb').read())

普段HTMLXMLなどを扱っている場合は改行コードで問題にならないので、バイナリファイルを扱う場合は気を付けてください。

リンク

cgi — Common Gateway Interface support — Python 3.8.1rc1 documentation
https://docs.python.org/3/library/cgi.html

コメントを残す

メールアドレスが公開されることはありません。