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