【发布时间】:2015-05-28 03:26:19
【问题描述】:
我通过 Django - Rest - Framework 将 .zip 文件发布到我的 Django 应用程序中。此 zip 文件是一个文件夹,其中包含多个文件,其中一个图像。我想在上传后提取文件夹,选择图像并将其分配给模型。这可能吗?如果没有,也许我可以编写一个获取缩略图的属性?我希望以后能够显示画廊中的所有缩略图。
类似:
class FUploadSerializer(serializers.ModelSerializer):
file = serializers.FileField()
class Meta:
model = FUpload
fields = ('created','file')
class FUpload(models.Model):
created = models.DateTimeField(auto_now_add=True)
file = models.FileField(upload_to=get_path)
thumbnail = ImageField() ??? # get from uploaded folder
编辑
我尝试了以下方法,但得到了:“image”:[ “提交的数据不是文件。请检查表单上的编码类型。” ] .我是在完全倒退吗?让客户端分别处理发送图像和 .zip 文件夹是否“更好”(数据是从脚本发送的)? ModelViewSet 是处理这个问题的正确位置吗?
class Thumbnail(models.Model):
image = models.ImageField()
file = models.FileField()
class ThumbnailViewSet(viewsets.ModelViewSet):
queryset = Thumbnail.objects.all()
serializer_class = ThumbnailSerializer
parser_classes = (MultiPartParser, FormParser,)
def perform_create(self, serializer):
file = self.request.FILES['file']
zf = zipfile.ZipFile(file)
content_list = zf.namelist()
imgdata = zf.open(content_list[0])
serializer.save(image=imgdata)
class ThumbnailSerializer(serializers.ModelSerializer):
file = serializers.FileField()
image = serializers.ImageField(allow_empty_file=True, required=False)
class Meta:
model = Thumbnail
fields = ('file', 'image')
【问题讨论】:
-
几个问题可以帮助您找到答案:您以后需要访问整个 zip 文件夹吗?你是如何上传这个 zip 文件的? (它是否附加到表单域?)
-
上传将主要通过命令行进行,例如使用 HTTPie,因此文件仅附加到模型中的 FileField。我希望能够解压缩文件并使用其中的一些内容,例如图像文件。另一个设计也是可以考虑的,如果它使过程更容易......
标签: django-models django-rest-framework