2011-06-22 19 views
0

Google App Engineでdjangoを使用しています。私は画像をアップロードしようとしています。Googleアプリケーションエンジンのdjangoアップロードファイルエラー

私は、フォームのデバッグセッション

Exception Type: NotImageError 
Exception Value:Empty image data. 

WHYで私は、このエラーを与えて

<form enctype="multipart/form-data" action="addImage" method="post"> 
     <p>Title of the Image: 
     <input type="text" name="title" /></p> 
     <p>Please select image to upload: 
     <input type="file" name="img" required="True"/></p> 
     <p><input type="submit" value="Upload" /></p> 
    </form> 

このビューへのマッピングを

def addImage(request): 
    image = Image() 
    image.title = request.POST.get("title") 
    img = images.resize(request.POST.get('img'),50,50) 
    image.blob = db.Blob(img) 
    image.put() 
    return HttpResponse('<html><head><meta HTTP-EQUIV="REFRESH" content="2; url=/"></head><body>One item added successfuly </body></html>') 

を作っ?????

答えて

0

私はGoogle App Engineを使用していないが、これは、私は純粋なDjangoの1.3のインストールでそれを行うだろうかです:

forms.py:

from django import forms 
from django.forms import fields 

class UploadImageForm(forms.Form): 
    image_file = fields.ImageField() 

views.py:

from django.shortcuts import render_to_response 
from django.template import RequestContext 
from NAME_OF_YOUR_APP.forms import UploadImageForm 

def addImage(request): 

    if request.method == 'POST': 
     upload_image_form = UploadImageForm(data=request.POST, files=request.FILES) 

     if upload_image_form.is_valid(): 
      image_file = request.cleaned_data['image_file'] 
      # do something with the image... 
      return ... 

    else: 
     upload_image_form = UploadImageForm() 

    context = {'form':upload_image_form} 
    return render_to_response('path/to/upload_template.html', context, context_instance=RequestContext(request)) 

upload_template.html:

<form enctype="multipart/form-data" action="" method="post"> 
    {% csrf_token %} 
    <table> 
     <tr> 
      <td>{{ form.image_file.label_tag }}</td> 
      <td>{{ form.image_file }}</td> 
      <td>{% if form.image_file.errors %}{% for error in form.image_file.errors %}{{ error }}{% endfor %}{% endif %}</td> 
     </tr> 
    </table> 
    <input type="submit" value="Submit"/> 
</form> 

あなたのテンプレートコードは(それは私がGAEが必要かどうかはわからない{% csrf_token %}を、欠けている)よさそうです。ビューコードは、リクエストがPOSTリクエストであるかどうかを確認する必要があります。

私の例では、アップロードするimage_fileを受け取るUploadImageFormというフォームを作成しました。 Logicはそのように動作します:

  1. ユーザーの訪問が
  2. addImage()ランをexample.com/upload_image。これはGETでPOST要求ではないので、空のUploadImageForm()を作成し、upload_template.htmlの中にレンダリングします。
  3. ユーザーがフォームに表示されます。
  4. ユーザーがフォームに記入し、画像を送信します。
  5. サーバーがPOST要求を受信し、addImage()が再度呼び出されます。
  6. アップロードされたファイルデータをUploadImageFormにバインドします。
  7. upload_image_form.is_valid()がTrueの場合など、エラーがなければ、cleaned_dataからimage_fileを取得し、それを使って何かを行うことができます。
  8. エラーがある場合(upload_image_form.is_valid()がFalse)、テンプレートはエラーメッセージとともに再表示されます。
0

本当に簡単、

編集この行:この1と

img = images.resize(request.POST.get('img'),50,50) 

img = request.FILES['img'].read() 

あなたはジャンゴ1を使用していることを確認してください。2

0

def addImage(request): 
    image = Image() 
    image.title = request.POST.get("title") 
    image.blob = db.Blob(str(request.FILES['img']['content'])) 
    image.put() 
    return HttpResponse('<html><head><meta HTTP-EQUIV="REFRESH" content="2; url=/"></head><body>One item added successfuly </body></html>') 
:) ... ..それは私のために働く、これを試してみてください
関連する問題