08/05/23 15:16:59
>>373-374
使用環境をまったく書いてないのは質問として NG だと思う。
サーバがWindows環境だとバイナリファイルの扱いに注意が必要だから。
CGI 作成の注意としては、ヘッダの行末は \n ではなく \r\n でないといけないはず。
> print f.read(),
ここも1バイト余計にデータを送っていることになるのでよくない。
手元の Windows マシンでは Python 付属の CGIHTTPServer を使って以下のコードで動いた。
import sys, os
import cgi
import cgitb; cgitb.enable()
if sys.platform == "win32":
import msvcrt
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
filepath = "test.jpg"
filename = os.path.split(filepath)
filename = filename[1]
filesize = os.path.getsize(filepath)
sys.stdout.write('Content-Type: application/octet-stream\r\n')
sys.stdout.write('Content-Disposition: attachment; filename="%s"\r\n' % filename)
sys.stdout.write('Content-Length: %d\r\n' % filesize)
sys.stdout.write('\r\n')
f = open(filepath, "rb")
sys.stdout.write(f.read())
sys.stdout.flush()
f.close()