Как сохранить аудиофайл, полученный через Javascript/ajax, в django media
Я записываю голос через микрофон с фронт-энда с помощью javascript и отправляю его обратно с помощью ajax.
<center>
<p>
{% csrf_token %}
<button class="btn btn-primary py-3 px-5" id=record>Record</button>
<button class="btn btn-primary py-3 px-5" id=stopRecord disabled>Stop</button>
</p>
<p>
<audio id=recordedAudio></audio>
</p>
<h4 id="result" > Result</h4>
</center>
Это мой html шаблон
Ajax файл
$.ajax({
type: 'POST',
url: '/demo/audio/',
data: fd,
dataType: 'text'
})
Я не создавал никакой модели для этого. Вот функция views.py
def audio_demo(request):
if request.method=='POST':
req=request.POST.get('data')
d=req.split(",")[1]
file_name='sub_app/media/file_{}.oga'.format(random.randint(0,99))
with open(file_name, 'wb') as f:
f.write(base64.b64decode(d))
Хотя это сохранение в папке media, но это не правильный способ. Я думаю, что правильный способ - это создать объект модели, как мы делаем для поля file или image. Но я не хочу загружать файл, как в поле file. Вместо этого я хочу записать его. Моя конечная цель - хранить аудиофайл в папке media, которая на самом деле является ведром S3, а затем получить путь к файлу. Приведенный выше фрагмент кода сохраняет файл, но в локальной папке media, а не на S3. Для уточнения, моя папка media настроена на S3. Мои изображения загружаются туда.
Edit. Я создал поле модели.
class Audio(models.Model):
audio_id=models.AutoField(primary_key=True)
audio = models.FileField(upload_to='audio/')
class Meta: verbose_name_plural = 'Audios'
def __str__(self):
return self.audio_id
Теперь идея заключается в том, чтобы вставить аудио в модель
if request.method=='POST':
audio=models.Audio()
req=request.POST.get('data')
d=req.split(",")[1]
#here should be a way to insert audio to audioModel instead of locally saving it.