Skip to main content
 首页 » 编程设计

python之Django:如何将字节对象保存到 models.FileField

2024年08月14日44bhlsheji

我的 Web 应用程序具有以下结构:

  1. 使用 Django 做后端
  2. 前端使用 React。

我有一个 React 表单。我从客户端表单发送一个文件,然后在我的 Django 应用程序中使用 APIView 接收该文件。

我收到一个 m3u 文件作为字节对象。

b'------WebKitFormBoundaryIaAPDyj9Qrx8DrWA\r\nContent-Disposition:  
form-data; name="upload";  
filename="test.m3u"\r\nContent-Type: audio/x-  
mpegurl\r\n\r\n#EXTM3U\n#EXTINF:-1 tvg-ID="" tvg-name="... 

我会将 Django 模型中的文件保存到 models.FileField 并将字节对象转换为 m3u 文件。 你是怎么做到的?

请您参考如下方法:

  1. models.FileField(models.ImageField) 需要 django.core.files.base.File 类对象 例如)

    • django.core.files.base.File
    • django.core.files.images.ImageFile
  2. File 或 ImageFile 需要两个参数。

    1. IO 对象:具有 seek() 方法(例如)io.BytesIO)。

    2. 名称:str。 (重要!没有名字,它将不起作用)。

  3. bytes 对象没有 IO 的方法(例如)seek())。它应该被转换为 IO 对象。


模型.py

class Message(models.Model): 
    image = models.ImageField(upload_to='message_image/%Y/%m', null=True) 

views.py 或 consumers.py 或 some-where.py

import io 
from django.core.files.images import ImageFile 
from myapp.models import Message 
 
def create_image_message(image_bytes): 
    image = ImageFile(io.BytesIO(image_bytes), name='foo.jpg')  # << the answer! 
    new_message = Message.objects.create(image=image)