ファイルアップロード処理でtempfileを使う
ファイルアップロードをする際にposterを使っています。とても便利なのですが、実体ファイルを構築して、posterに食わせて、ファイル削除、という手順が面倒だったので、tempfileを使ってみました。
# make temporary file
temp = tempfile.TemporaryFile()
temp.write(simplejson.dumps({
"seq": 1,
"abc": 123,
"def": "ASD"
}))
temp.write("\n")
temp.write(simplejson.dumps({
"seq": 2,
"abc": 123,
"def": "ASD"
}))
temp.write("\n")
temp.write(simplejson.dumps({
"seq": 3,
"abc": 123,
"def": "ASD"
}))
temp.flush()
temp.seek(0)
# encoding
datagen, headers = multipart_encode({
"args": "other parameter",
"datas": temp
})
# create request
request = urllib2.Request("http://localhost:8000/fileupload/", datagen, headers)
# do post !
response = urllib2.urlopen(request)
これで少なくともファイルの後始末は気にしなくてよいので便利。ちなみにSpooledTemporaryFileだとうまくいかない。rollover()すればイケるかもしれないけど未検証。