2012-01-11 10 views
6

gönderme.Django imageField ile bir görüntü nasıl kaydedilir? Bir web formu değil bir uygulamadan (iOS android vb ..)

class someImage(models.Model): 
    image = models.ImageField(upload_to= settings.SHARE_IMAGE_UPLOAD_PATH) 

@csrf_exempt 
def saveImage(request): 

Görünümü nasıl yazılır? bir posta isteğinde bir görüntü alır. i bulmak Her şey formu ile ilgili (sunucu acemi) 'dir

+0

bakmak [django-photologue] (http://code.google.com/p/django-photologue/), yapmak istediğiniz her şey zaten bitmiştir :) – juliomalegria

+0

teşekkürler, tüm bu özelliklere ihtiyacım yok, en temelini arıyorum imageField'in kullanımı –

cevap

15

:

from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseNotAllowed 
from django.utils import simplejson 

def upload_view(request): 
    if request.method == 'POST': 
     form = UploadForm(request.POST, request.FILES) 
     if form.is_valid(): 
      form.save() 
      result = {'success': True} 
      return HttpResponse(simplejson.dumps(result), mimetype='application/json') 
     else: 
      return HttpResponseBadRequest() 
    else: 
     return HttpResponseNotAllowed(['POST']) 
+0

Başarı elde ederim, ancak görüntüyü Image.save kullanarak diske kaydetmeyi denediğimde, modal (yerel yol: Users/yogevshelly/Downloads /) olarak ayarladığım yol üzerinde kaydedilen dosyayı göremiyorum ('yol', 'JPEG') dosyayı görüyorum, ancak yola başladığım '/' harfini eklemeliyim. herhangi bir fikir? teşekkürler –

+0

Oops, görüntüler sadece proje klasörü ve benim bilgisayar kökü klasörü ile ilgili olarak, çok iyi kaydedildi, çok teşekkürler! –

+0

http://stackoverflow.com/a/5567063/955619 adresinde belirtilen form şablonuna 'trctype =" multipart/form-data "' yazmayı unutmayın. – Caumons

3

Düzenleme: Yukarıda seçilen cevabı kullanın - Aşağıdaki kod soru için çalışıyor ama tavsiye edilmez.

yüklediğiniz resim dosyası bulunabilir:

request.FILES['image'] # assuming input name is called 'image' 

Size Resim nesneyi dönmez, bunun yerine bir uploadedfile nesnesi. Belgelerin bu bölümünü okuyabilirsiniz (Django 1.3.x kullanıyor olduğunuzu farz ediyorum): https://docs.djangoproject.com/en/1.3/topics/http/file-uploads/#handling-uploaded-files

UploadedFile nesnesinde bulunan alanları ve yöntemleri ve ayrıca dosya yükleme işlemlerini el ile ele almanın ortak bir yolunu kapsar. Görüntü dosyasını bir dosya nesnesine yazmak ve daha sonra ImageField'ınıza kaydetmek için aynı yöntemi kullanabilirsiniz.

Aşağıdaki kod çalışmalıdır, ancak güvenli kod değildir. Varsa, * nix makinesini kullandığınızı varsayarak, hedef dosyayı başka bir yere kaydedin.

@csrf_exempt 
def saveImage(request): 
    # warning, code might not be safe 
    up_file = request.FILES['image'] 
    destination = open('/tmp/' + up_file.name , 'wb+') 
    for chunk in up_file.chunks(): 
     destination.write(chunk) 
    destination.close() 
    img = someImage() 
    img.image.save(up_file.name, File(open('/tmp/' + up_file.name, 'r'))) 
    img.save() 
    # return any response you want after this 

diğer şeyler not almak: Mutlaka işe yaraması için aşağıdaki öznitelik vardır oluştururlar:

<form enctype="multipart/form-data" ... > 

ben normal olmak bu kullanım hatırlamıyorum, ama gerçekten, Formlar tavsiye edilir. Eğer isteği işlemek için ModelForm kullanamaz anlamına gelmez verilerini göndermek için gerçek bir HTML formunu kullanarak değiliz diye

+0

teşekkürler, bunu biliyorum. şimdi ne olacak? akış nedir onu fiziksel dosyaya kaydedip sadece imageField yolunu mu geçirdim? herhangi bir parçacıkları çok yaygın bir görev olmalı, teşekkürler! –

+0

Yanıtı örnek kod ile güncelledim. Model Formları kullandıysanız kod çok daha basit ve daha güvenli olacaktır. –

İlgili konular