ほんじゃらねっと

ダイエット中プログラマのブログ

Djangoのファイルアップロード処理

アップロードしたファイルを保存する処理のサンプルが全然見つからなくて苦労した。
やはりこういう新しい技術を使う時はソースを読まねばならんか。


ここでサンプル発見。助かりました。
http://d.hatena.ne.jp/SumiTomohiko/20070126/1169768661


また、画像のサイズを変更したりできるらしい、こちらのライブラリのPhotoFieldというのをImageFieldの代わりに使ってみる。
http://www.verdjn.com/wiki/PhotoField


まだアップロードできることを確認しただけだけども、メモしておこう。


models.py

from django.db import models
from verdjnlib.fields import PhotoField
class Photo(models.Model):
image = PhotoField("写真", upload_to='photos', height=1024, width=1024)


upload_test.html

...
<form action="/picture/upload/" method="POST" enctype="multipart/form-data">
写真をアップロード
<input type="file" name="image_file" />
<input type="submit" value="アップロードする" />
</form>
...


views.py

from django.shortcuts import render_to_response
from django.template import RequestContext
from test.main.models import Photo
def picture_upload(request):
if request.method == "POST":
post_data = request.POST
post_data.update(request.FILES)
photo = Photo()
image_file = post_data["image_file"]
if image_file:
filename = image_file["filename"]
photo.image = filename
photo.save_image_file(filename, image_file["content"])
photo.save()
message = "アップロードを完了しました"
else:
message = "アップロードに失敗しました"
else:
message = "アップロードに失敗しました"
return render_to_response('complete.html', {'message': message}, context_instance=RequestContext(request))


次は、サムネイル用画像保存処理やら、入力チェックを追加したい。
画像を表示する処理も作らねば。