发送文件(类型音频)没有输入类型="文件"在ajax

时间:2016-01-27 22:29:51

标签: php jquery ajax file transfer

我在客户端(记录)创建一个文件,然后我将其发送到远程服务器上。但是我不知道如何在不使用输入文件的情况下执行此操作,我有文件路径,但是当我需要通过ajax发送它时,在$ _FILES端PHP中未检测到。如果我创建一个blob它可以工作,但文件与录制文件不匹配。

有可能吗?

[更新1]

该文件是一个音频/ mpeg,这个文件是在录音后创建的,在那里我得到了位置,我可以再次播放。我需要在用户没有点击文件输入的情况下恢复

HTML

    <form   enctype="multipart/form-data" id="form_message" method="POST">
       <textarea name="message" id="message" value="" placeholder="Ecris quelque chose"></textarea>
       <input type="submit" style="display:none;" value="Valider"/>
   </form>

JS

fd = new FormData();
    fd.append('audiofile', 'filepath.mp3');
    // other data
function submit_form_message(fd){
        $.ajax({
            type: 'POST',
            url: "url",
            data: fd,
            processData: false,
            contentType: false,
            success: function(data){}
        });
}

PHP

if($_FILES['audiofile']['size'] !=0){
            if ($_FILES['audiofile']['error'] == 0){
                $extensions_valides = array('mp3' , 'wav');
                if(in_array($_POST['extension'],$extensions_valides)){
                    $tmp_name = $_FILES["audiofile"]["tmp_name"];
                    $name_file = $notId.".".$_POST['extension'];
                    move_uploaded_file($tmp_name, $_SERVER['DOCUMENT_ROOT']."/Bell/sound/".$name_file);
                }
            }
        }

1 个答案:

答案 0 :(得分:1)

在这里找到了这个,我认为这可能是你最好的选择:Using local file for Web Audio API in Javascript

  

步骤1:创建Base 64声音字体

     

首先,我需要将我的mp3转换为Base64编码的字符串并存储它   作为JSON。我在这里找到了一个为我做这个转换的网站 -   http://www.mobilefish.com/services/base64/base64.php您可能需要   使用文本编辑器删除返回字符,但对于任何人   需要一个例子我在这里发现了一些钢琴音调 -   https://raw.github.com/mudcube/MIDI.js/master/soundfont/acoustic_grand_piano-mp3.js   请注意,为了使用我的示例,您需要删除   标题部分数据:audio / mpeg; base64,

     

第2步:将声音字体解码为ArrayBuffer

     

您可以自己实现,但我找到了一个API来执行此操作   完美(为什么重新发明轮子,对吗?) -   https://github.com/danguer/blog-examples/blob/master/js/base64-binary.js   资源来自 - 这里

     

第3步:添加其余代码   相当简单

var cNote  = acoustic_grand_piano.C2;
var byteArray = Base64Binary.decodeArrayBuffer(cNote); 
var context = new webkitAudioContext();

context.decodeAudioData(byteArray, function(buffer) {
    var source = context.createBufferSource(); // creates a sound source
    source.buffer = buffer;    
    source.connect(context.destination); // connect the source to the context's destination (the speakers)
    source.noteOn(0); 
}, function(err) { console.log("err(decodeAudioData): "+err); });

由于您传递的是Base64内容字符串,因此您不会发送原始文件,因此无需选择文件。然后,您可以在PHP中解码Base64并将其写入服务器上的新音频文件。