提取 zip 文件并将其存储到图像或文件字段

Posted

技术标签:

【中文标题】提取 zip 文件并将其存储到图像或文件字段【英文标题】:extracting zip file and storing it to image or file field 【发布时间】:2020-08-05 14:44:24 【问题描述】:

在我的 django 项目中,我希望用户上传一个 epub 文件(基本上是一个 rar 文件)。我想提取 epub 文件以获取该 epub 的封面并将其保存到图像字段或文件字段

我的想法是使用 zipfile 模块提取文件作为二进制数据,但是如何将二进制数据转换为图像字段或二进制字段

@api_view(['POST'])
@authentication_classes([TokenAuthentication])
@permission_classes([IsAuthenticated])
def create_book(request, *args, **kwargs):
    serializer = Book_serialzier(
        data=request.data, context="user": request.user)
    serializer.initial_data["title"] = serializer.initial_data.get(
        "book").name.split(".epub")[0]
    serializer.initial_data["user"] = request.user.id
    
    #here i started extracting
    with zipfile.ZipFile(serializer.initial_data.get("book"), 'r') as my_zip:
        if "cover.jpeg" in my_zip.namelist():
            serializer.initial_data["cover"] = my_zip.read("cover.jpeg")


    if(serializer.is_valid(raise_exception=True)):
        book = serializer.save()
    return Response(serializer.data)

【问题讨论】:

【参考方案1】:

根据您的问题陈述,我了解到您想从 epub 文件中提取封面图像,然后将其保存到您的字段中。

serializer.initial_data["cover"] = my_zip.read("cover.jpeg")

这一行读取字节串并将其保存到您的“封面”字段中。通过以二进制模式写入文件,您可以轻松地将该字节字符串转换为图像。

with open('cover_image.jpg','wb') as imageFile:
    imageFile.write(fileData) #fileData is what you will read from "cover" field

处理图像的最佳方法是将其转换为 base64 格式

你可以像this一样轻松地做到这一点

要将base64字符串转换回图像,您可以执行this

【讨论】:

以上是关于提取 zip 文件并将其存储到图像或文件字段的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JSON 字段上应用正则表达式以从中提取某些值并将其存储到 Mule Studio 的 PostgreSQL Dataabse 中?

我们如何使用文件系统中的某些动态字段搜索存储在 zip 文件中的 xml 文件?

如何使用android [关闭]获取RealmObject中的最后一个修改过的RealmObject或字段

Django 多文件字段

如何从 Java 中的 HttpResponse 中获取单个表单字段并将其写入文件?

使用带有 Node.js 的 AWS Lambda 函数从 S3 存储桶中提取 zip 文件并上传到另一个存储桶