Я создаю файл на клиенте (запись), а затем отправляю его на свой удаленный сервер. Однако я не могу найти, как это сделать без использования входного файла, у меня есть путь к файлу, но когда мне нужно отправить его по ajax, не обнаруживается в PHP стороне $ _FILES. Если я создаю 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);
}
}
}
Нашел это здесь, которое, я думаю, может быть вашим лучшим выбором: Использование локального файла для Web Audio API в 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
Обратите внимание, что для работы с моим примером вам необходимо удалить
данные части заголовка: аудио / 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, вы не отправляете необработанный файл и, следовательно, не должны выбирать файл. Затем вы можете декодировать Base64 в PHP и записать его в новый аудиофайл на сервере.
Других решений пока нет …