2015-10-28 3 views
0

Я пытаюсь записать файл на сервер. Для целей записи я использую демо recorderсохранить файл blob на сервер

В конце записи он дает мне ссылку blob-ссылки на записанный файл. Итак, после поиска в Интернете я обнаружил, что могу использовать этот URL-адрес bob для его сохранения.
Here - ссылка, которая говорит о сохранении капли. После этого я пытаюсь получить его и загрузить на сервер.

1- я получаю ссылку на файл двоичных объектов

var data = document.getElementById("save").href 

После этого я использую JS код в моем файле index.html отправить
блоб URL в PHP код.
JS код

<script> 
function saveAudio(){ 
var req = null; 
var url = "savefile.php"; 
var data = document.getElementById("save").href.toString();// document.getElementById("save").innerHTML;// = xhttp.responseText;; // you have to check how to get the data from your saveAudio() method 
window.alert(data); 

(window.XMLHttpRequest) ? req = new XMLHttpRequest() : (window.ActiveXObject) ? req = new ActiveXObject("Microsoft.XMLHTTP") : req = false; 
req.open("POST", url, true); 
req.setRequestHeader("Content-Type", "multipart/form-data"); 

if(data != null) //&& data != "") 
{ 
    req.setRequestHeader("Content-length", data.length); 
    req.send(data); 
}} 


</script> 

PHP код

<?php 

$save_folder = dirname(__FILE__) ."/js"; 
if(! file_exists($save_folder)) { 
    if(! mkdir($save_folder)) { 
     die("failed to create save folder $save_folder"); 
    } 
} 

$key = 'filename'; 
$tmp_name = $_FILES["audiofile"]["tmp_name"]; 
$upload_name = $_FILES["audiofile"]["name"]; 
$type = $_FILES["audiofile"]["type"]; 
$filename = "$save_folder/$upload_name"; 
$saved = 0; 
if(($type == 'audio/x-wav' || $type == 'application/octet-stream') && preg_match('/^[a-zA-Z0-9_\-]+\.wav$/', $upload_name)) { 

    $saved = move_uploaded_file($tmp_name, $filename) ? 1 : 0; 
} 

//name is needed to send in the php file 

?> 

я получаю 2 ошибки при компиляции в браузере
1-отказались установить небезопасный заголовок "Content-Length".
2-POST savefile.php 500

Я полагаю, что что-то не так с файлом php!
Как я могу справиться с этими ошибками и выполнить задачу загрузки?
Есть ли какой-нибудь открытый источник, который позволяет напрямую загружать blob-url на сервер без использования php?
Я ценю любую помощь и предложение!

ответ

1

Попробуйте удалить строку: req.setRequestHeader («Content-length», data.length);

XMLHttpRequest не имеет права устанавливать эти заголовки, потому что это будет уязвимость системы безопасности. 500, скорее всего, является результатом отказа запроса.

Вы можете прочитать здесь XMLHttpReqest http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader%28%29-method

Вот некоторые другие темы, тот же вопрос:

Pass Blob through ajax to generate a file

How can javascript upload a blob?

Смежные вопросы