2015-11-15 12 views
5

Ich versuche, Dateiupload mit DRF und jQuery zu erstellen. Ich googelte und fand this sample. Ich habe einige ähnlichen Code auf Beckand:Django Rest Framework und Datei-Upload

class Attachment(BaseModel): 
     file = models.FileField(upload_to=get_photo_path) 


class AttachmentSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = models.Attachment 
     fields = ('id', 'file') 

class AttachmentViewSet(viewsets.ModelViewSet): 
    parser_classes = (FileUploadParser,) 
    serializer_class = serializers.AttachmentSerializer 
    queryset = models.Attachment.objects.all() 

    def pre_save(self, obj): 
     obj.file = self.request.FILES.get('file') 

und versuchte Angular Probe jQuery

var fd = new FormData() 
    fd.append('file', file) // file from file-field 
    var reader = new FileReader() 
    $.ajax({ 
     url: 'http://localhost:8001/files/', 
     data: fd, 
     processData: false, 
     contentType: false, 
     type: 'POST' 
    }).done(... 

Für einige Gründe, warum ich auf Backend einen Fehler haben zu übersetzen, wenn versuchen, eine Datei zu laden:

detail: "FileUpload parse error - none of upload handlers can handle the stream" 

Antwort

6

Eigentlich ist das Problem eine Art von Parser. Ich sollte (FormParser, MultiPartParser,) statt (FileUploadParser,)

3

Standard Django laden Handler verwenden sind:

["django.core.files.uploadhandler.MemoryFileUploadHandler", "django.core.files.uploadhandler.TemporaryFileUploadHandler"] 

und es gibt keine FILE_UPLOAD_HANDLERS Parameter in der App-Einstellungen-Datei standardmäßig.

In meinem Fall habe ich MemoryFileUploadHandler ausgeschlossen und stellen

FILE_UPLOAD_HANDLERS = ["django.core.files.uploadhandler.TemporaryFileUploadHandler", ] 

in App-Einstellungen-Datei und es löste das Problem.

Verwandte Themen