代码之家  ›  专栏  ›  技术社区  ›  whitebear

如何保存PUT上传的文件和模型

  •  0
  • whitebear  · 技术社区  · 4 年前

    我用这个文档制作了文件上传API https://www.django-rest-framework.org/api-guide/parsers/#fileuploadparser

    在里面 view.py

    class FileUploadView(APIView):
        parser_classes = [FileUploadParser]
    
        def put(self, request, filename, format=None):
            file_obj = request.data['file']
            entry = WaveFile(document=file_obj) 
            entry.save()
            return Response(status=204)
    

    然后在 urls.py

    urlpatterns += [
        re_path(r'^upload/(?P<filename>[^/]+)$', FileUploadView.as_view())
    ]
    

    模型如下所示

    class WaveFile(models.Model):
        description = models.CharField(max_length=255, blank=True)
        document = models.FileField(upload_to='@_mat/_spleeter_wav/')
        uploaded_at = models.DateTimeField(auto_now_add=True)
    

    现在我可以将文件作为 PUT 这样地 curl -X PUT -F upfile=_mat/e_h_01.jpg http://localhost:8008/upload/e_h_01.jpg

    但是,上载的文件被破坏,因为文件附加了不必要的文件头。

    --------------------------02d173694176f7aa
    Content-Disposition: form-data; name="upfile"; filename="e_h_01.jpg"
    Content-Type: image/jpeg
    

    为什么会这样?如何从中提取文件本身 request.data['file'] ?

    0 回复  |  直到 4 年前