2017-08-01 2 views
-1

Während ein Imagefile zu einem Backend Django REST Hochladen ich folgende Fehlermeldung am Problem aufgetreten ist:Django Mehrteiliger Bild hochladen: 'NoneType' Objekt hat kein Attribut 'lesen'

Internal Server Error: /user/addimage/ 
Traceback (most recent call last): 
    File "/home/neuron/genie2_env/lib/python3.4/site-packages/django/core/handlers/exception.py", liner 
    response = get_response(request) 
    File "/home/neuron/genie2_env/lib/python3.4/site-packages/django/core/handlers/base.py", line 187,e 
    response = self.process_exception_by_middleware(e, request) 
    File "/home/neuron/genie2_env/lib/python3.4/site-packages/django/core/handlers/base.py", line 185,e 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "/home/neuron/genie2_env/lib/python3.4/site-packages/django/views/decorators/csrf.py", line 5w 
    return view_func(*args, **kwargs) 
    File "/home/neuron/genie2_env/lib/python3.4/site-packages/django/views/generic/base.py", line 68, w 
    return self.dispatch(request, *args, **kwargs) 
    File "/home/neuron/genie2_env/lib/python3.4/site-packages/rest_framework/views.py", line 489, in dh 
    response = self.handle_exception(exc) 
    File "/home/neuron/genie2_env/lib/python3.4/site-packages/rest_framework/views.py", line 449, in hn 
    self.raise_uncaught_exception(exc) 
    File "/home/neuron/genie2_env/lib/python3.4/site-packages/rest_framework/views.py", line 486, in dh 
    response = handler(request, *args, **kwargs) 
    File "/home/neuron/genie2/user_profiles/views.py", line 92, in post 
    profile_stored = file_system_instance.save('profile_' + data['first_name'] + ".jpg", request.FIL) 
    File "/home/neuron/genie2_env/lib/python3.4/site-packages/django/core/files/storage.py", line 54, e 
    return self._save(name, content) 
    File "/home/neuron/genie2_env/lib/python3.4/site-packages/django/core/files/storage.py", line 351,e 
    for chunk in content.chunks(): 
    File "/home/neuron/genie2_env/lib/python3.4/site-packages/django/core/files/base.py", line 81, in s 
    data = self.read(chunk_size) 
    File "/home/neuron/genie2_env/lib/python3.4/site-packages/django/core/files/utils.py", line 16, in> 
    read = property(lambda self: self.file.read) 
AttributeError: 'NoneType' object has no attribute 'read' 
[01/Aug/2017 14:14:22] "POST /user/addimage/ HTTP/1.1" 500 18686 

Meine Ansicht:

class AddImage(APIView): 
    authentication_classes = (TokenAuthentication,) 
    permission_classes = (IsAuthenticated,) 

    def post(self, request): 
     user_serialized = ContactNumberUserSerializer(instance=self.request.user) 
     data = user_serialized.data 
     instance = ContactNumberUser.objects.get(contact=data['contact']) 

     profile_img_instance = ImageFile(request.FILES.get('profile_pic')) 
     file_system_instance = FileSystemStorage(location=settings.MEDIA_ROOT) 
     instance.profile_pic = file_system_instance.save('profile_' + data['first_name'] + ".jpg", profile_img_instance) 
     instance.save() 
     return Response(status=status.HTTP_200_OK) 

Mache ich es irgendwie völlig falsch? Wenn ja, schlagen Sie bitte eine bessere Lösung vor.

Antwort

0

Django REST Framework 3 hat die Option request.FILES nicht mehr unterstützt. Sie können request.data für das imagefield verwenden.

ändern

request.FILES.get('profile_pic') 

zu

request.data.get('profile_pic') 

Wenn Sie Imagefield oder Filefield definiert sind, brauchen Sie keine Datei manuell hochladen. Django wird es für Sie tun

Statt diesem Code

profile_img_instance = ImageFile(request.FILES.get('profile_pic')) 
file_system_instance = FileSystemStorage(location=settings.MEDIA_ROOT) 
instance.profile_pic = file_system_instance.save('profile_' + data['first_name'] + ".jpg", profile_img_instance) 

Direkt Bild zuweisen, wie dies sicher, dass Ihr Modellfeld Look machen

instance.profile_pic = request.data.get('profile_pic') 

auch Feld,

class Model(models.Model): 
    profile_pic = models.ImageField(upload_to='profile') 
+0

Ich habe es versucht, immer noch keine Veränderung. Es wirft mich den gleichen Fehler. –

+0

Sind Sie sicher, dass das Bild übergeben wurde? Drucken Sie request.data.get ('profile_pic') und überprüfen Sie die Konsole – Aniket

Verwandte Themen