python - 为什么我的图像上传到 Django Rest Framework 后无法读取?

标签 python django django-rest-framework

我是 Django 新手,我想实现一个允许上传文件的请求。 我为此编写了一些代码,但是当我在本地打开该文件时,我的计算机说它可能已损坏。 我不明白为什么,因为当我用 postman 发送时,大小文件与另一个文件相同。

这是我的代码:

查看.py

 def handle_uploaded_file(f):
     with open(f.name, 'wb+') as destination:
        for chunk in f.chunks():
        destination.write(chunk)


 class FileUploadView(APIView):
     parser_classes = (FileUploadParser,)

     def put(self, request, filename, format="png"):
        file_obj = request.data['file']
        handle_uploaded_file(file_obj)
        return Response(filename, status.HTTP_201_CREATED)

最佳答案

不确定您是否手动将文件写入系统,但 Django 已经有一种方法来处理文件上传 - 并且 DRF 就建立在其之上。您所要做的就是创建一个带有 FileField or any field that extends from it 的模型。 .

class Upload(models.Model):
    user_upload = models.FileField(upload_to='path/to/upload')

请记住,数据库存储文件 - 它仅存储文件路径。文件将直接上传到您在字段中指定的路径。有关 upload_to 的更多信息 here .

要使用 DRF 上传 - 您所要做的就是使用 ModelSerializer 创建序列化器并使用通用 API View ,如 CreateAPIView除非您有其他要求。

您的 ModelSerializer 可以是这样的:

class UploadFileSerializer(serializers.ModelSerializer):
    class Meta:
        model = Upload  # reference the model above
        fields = '__all__'

在您看来:

class UploadFileView(CreateAPIView):
     serializer_class = UploadFileSerializer

     def create(self, request, *args, **kwargs):
         serializer = self.get_serializer(data=request.data, files=request.FILES) # <------ note the request.FILES
         serializer.is_valid(raise_exception=True)
         self.perform_create(serializer)
         headers = self.get_success_headers(serializer.data)
         return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)

这应该可以解决问题!

关于python - 为什么我的图像上传到 Django Rest Framework 后无法读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43920665/

相关文章:

python - 如何在 slack.client 中提及用户

python - uWSGI 重置 PythonHome

python - 带有 filter_horizo​​ntal 的 Django 管理面板

python - 使用版本控制 : versioned url retrieval 的 DRF 测试 View

python - Tensorflow DecodeJPEG : Expected image (JPEG, PNG 或 GIF),以 '\000\000\000\000\000\000\000\00' 开头的格式未知

python - Cartopy 阴影浮雕

python - 在 json 上上传图像 DJANGO REST FRAMEWORK

python - Django Restful框架身份验证HTTP Post错误

python - 在 python 中将特定字段从数据帧转换为字典

django:如何从 ContentType 实例中获取对象