javascript 在将音频blob传输到Django服务器后,为什么数据库中保存的是.336Z文件而不是wav文件?

u4dcyp6a  于 2023-04-04  发布在  Java
关注(0)|答案(1)|浏览(102)

我正在使用Recorder.js和Django开发一个录音应用程序。当单击“上传”按钮时,音频blob被发送到Django服务器并保存在数据库中。然而,我面临一个问题,即不是将音频文件保存为wav格式,而是将其保存为.336Z文件在数据库中。为什么不能将文件保存为wav格式?

app.js

function createDownloadLink(blob) {
    
    var url = URL.createObjectURL(blob);
    var au = document.createElement('audio');
    var li = document.createElement('li');
    var link = document.createElement('a');

    //name of .wav file to use during upload and download (without extendion)
    var filename = new Date().toISOString();

    //add controls to the <audio> element
    au.controls = true;
    au.src = url;

    //save to disk link
    link.href = url;
    link.download = filename+".wav"; //download forces the browser to donwload the file using the  filename
    link.innerHTML = "Save to disk";

    //add the new audio element to li
    li.appendChild(au);
    
    //add the filename to the li
    li.appendChild(document.createTextNode(filename+".wav "))

    //add the save to disk link to li
    li.appendChild(link);
    
    //upload link
    var upload = document.createElement('a');
    upload.href="#";
    upload.innerHTML = "Upload";
    upload.addEventListener("click", function(event){
          var xhr=new XMLHttpRequest();
          xhr.onload=function(e) {
              if(this.readyState === 4) {
                  console.log("Server returned: ",e.target.responseText);
              }
          };
          var fd=new FormData();
          fd.append("audio_data",blob, filename.wav);
          xhr.open("POST","/save-audio/",true);
          xhr.send(fd);
    })
    li.appendChild(document.createTextNode (" "))//add a space in between
    li.appendChild(upload)//add the upload link to li

    //add the li element to the ol
    recordingsList.appendChild(li);
}

models.py

class Audio(models.Model):
    record= models.FileField(upload_to="media", null=True, blank=True)

views.py

@csrf_exempt
def save_audio(request):
    if request.method == 'POST':
        audio_file = request.FILES['audio_data']
        audio = Audio(record=audio_file)
        audio.save()
        return JsonResponse({'status': 'success'})
    else:
        return JsonResponse({'status': 'error'})
bjp0bcyl

bjp0bcyl1#

问题出在这一行

fd.append("audio_data",blob, filename.wav);

更改为

fd.append("audio_data", blob, filename+".wav");

应该可以

相关问题