Django: как сохранить байты объекта для моделей. FileField? - PullRequest
0 голосов
/ 25 декабря 2018

Мое веб-приложение имеет следующую структуру:

  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.Как ты это делаешь?

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Я решил использовать временный файл.Я использовал этот код:

extM3u = str.encode(body.decode('utf8').split('EXTM3U\n#')[1].split('------WebKitFormBoundary')[0])

fileTemp = NamedTemporaryFile(delete=True, dir='media/tmp')
fileTemp.write(extM3u)
filenameRe = re.compile('.*?filename=[\'"](.*?)[\'"]')
filename = regParse(filenameRe, body.decode('utf8'))
file = File(fileTemp, name=filename)
m3u = M3u(titleField=filename, fileField=file)
m3u.save()
0 голосов
/ 26 декабря 2018

Вы можете попробовать:

from django.core.files.base import ContentFile

file_data = ContentFile(base64.b64decode(fileData))
object.file.save(file_name, file_data)

Вы можете использовать ваше имя_файла с расширением .m3u, и вы его получите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...