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

ocr*_*m88 9 python django

我的 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="...
Run Code Online (Sandbox Code Playgroud)

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

koc*_*hul 11

  1. models.FileField( models.ImageField) 需要django.core.files.base.File像对象 ex)

    • django.core.files.images.ImageFile

    • django.core.files.base.ContentFile

  2. ImageFileContentFile需要两个参数。

    1. IO 对象:具有seek()方法 (ex) 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)
Run Code Online (Sandbox Code Playgroud)

views.py 或 consumer.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)
Run Code Online (Sandbox Code Playgroud)


Nav*_*han 6

你可以试试:

from django.core.files.base import ContentFile
import base64

file_data = ContentFile(base64.b64decode(fileData))
object.file.save(file_name, file_data)
Run Code Online (Sandbox Code Playgroud)

您可以使用带有 .m3u 扩展名的 file_name,您将拥有它。