2013-09-12 3 views
0

Я отправляю двоичные данные на сервер с помощью Blob, но в переменной ничего нет. Что я сделал не так?

var xhr = new XMLHttpRequest(); 
xhr.open('POST', '/save.php', true); 
var formData = new FormData(); 
formData.append("data", new Blob(["㚂☇䰉耸ڀ찃怮...binary...:⡒㠯ݟᑣ"])); 
xhr.send(formData); 
xhr.onload = function(e){ 
    if (this.status == 200){ 
     console.log(this.responseText); 
    } 
}; 

стороне сервера:

var_dump($_POST); //returns array(0) {} 

ответ

0

Это очень простое решение проблемы ...

При отправке BLOB он посылает как file не как post данные. Поэтому вам необходимо использовать $_FILES не $_POST.

Используя код модифицирован для var_dump($_FILES) выходов:

"array(1) { 
    ["data"]=> 
    array(5) { 
    ["name"]=> 
    string(4) "blob" 
    ["type"]=> 
    string(24) "application/octet-stream" 
    ["tmp_name"]=> 
    string(14) "/tmp/tmpfilename" 
    ["error"]=> 
    int(0) 
    ["size"]=> 
    int(44) 
    } 
} 

Затем можно открыть файл ServerSide с file_get_contents($_FILES['data']['tmpname']) же, как и любым другим загруженным файлом.

+0

Я проверил 'var_dump ($ _ FILES)' это было 'NULL' –

+0

Даже если он пуст он должен возвращать 'array {}', если он возвращает 'NULL', тогда это может означать, что вы неправильно написали его (маловероятно, но возможно!) или что ваш сервер отключил загрузку файлов. Что такое вывод из 'echo 'file_uploads:', ini_get ('file_uploads');' – Steven

+0

'file_uploads: 1' является результатом –

0

мне удалось отправить эти данные так:

var xhr = new XMLHttpRequest(); 
xhr.open('POST', '/save.php', true); 
xhr.send("㚂☇䰉耸ڀ찃怮...binary...:⡒㠯ݟᑣ"); 
xhr.onload = function(e){ 
    if (this.status == 200){ 
     console.log(this.responseText); 
    } 
}; 

стороне сервера:

var_dump($HTTP_RAW_POST_DATA); //string(1820) "㚂☇䰉耸ڀ찃怮...binary...:⡒㠯ݟᑣ" 
Смежные вопросы