我的Web应用程序具有以下结构:
我有一个与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并将bytes对象转换为m3u文件。 你怎么做?
答案 0 :(得分:1)
models.FileField(models.ImageField)需要像对象一样的django.core.files.base.File 例如)
django.core.files.images.ImageFile
django.core.files.base.ContentFile
ImageFile或ContentFile需要两个参数。
IO对象:具有seek()方法(例如io.BytesIO)。
名称:str。 (重要!没有名称,它将无法使用)。
bytes对象没有IO的方法(例如,seek())。应该将其转换为IO对象。
models.py
class Message(models.Model):
image = models.ImageField(upload_to='message_image/%Y/%m', null=True)
views.py或consumers.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)
答案 1 :(得分:0)
您可以尝试:
from django.core.files.base import ContentFile
file_data = ContentFile(base64.b64decode(fileData))
object.file.save(file_name, file_data)
您可以使用具有.m3u扩展名的文件名,并且应该具有它。
答案 2 :(得分:0)
我使用临时文件解决了。我使用了这段代码:
this.facturasElectricas = []
答案 3 :(得分:-1)
将字符串转换为字节
bytes_data = ... # bytes
string_data = bytes_data.hex() # this is a string that you can save in TextField in django model
然后,从字符串中获取字节:
bytes_data_2 = bytes.fromhex(string_data)