我在客户端(记录)创建一个文件,然后我将其发送到远程服务器上。但是我不知道如何在不使用输入文件的情况下执行此操作,我有文件路径,但是当我需要通过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);
}
}
}
答案 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并将其写入服务器上的新音频文件。