gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:15:33 24 4
gpt4 key购买 nike

我是 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com