武之新
ファイルアップロード処理で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()すればイケるかもしれないけど未検証。