2014-05-20 3 views
0

그래서 PHP 페이지에 blob 변수를 보내야하는 페이지를 만들었습니다. php 페이지는 pdo를 사용하여 blob을 mysql에 업로드한다. 나는 텍스트 변수를 전송하고 잘 업로드하도록 아약스를 설정했다. 그러나 BLOB을하려고 할 때 작동하지 않습니다.ajax와 함께 .js 파일에서 PHP로 BLOB 보내기

메인 페이지

var blob = new Blob(["i am a blob"]); 

    $.ajax({ 

     type: 'POST', 
     url: 'test.php', 
     data: {roll: blob}, 
    }); 

PHP 페이지

$got = $_POST['roll']; //gets the variable 

$pdo = new PDO('mysql:host='. $host .';dbname='.$db_name, $db_username, $db_password); 
    $query = $pdo->prepare('INSERT INTO books (test,rec) VALUES (?,?)'); 
    $query->bindValue(1, '35'); 
    $query->bindValue(2, $rollv); 
    $query->execute(); 

답변

-2

이 뭔가를 시도 할 수 있습니다.

var data; 
var blob = new Blob(["i am a blob"]); 

var reader = new FileReader(); 

reader.onloadend = function() { 
    data = reader.result; 

    $.ajax({ 
     type: 'POST', 
     url: 'test.php', 
     data: {roll: data}, 
    }); 
} 

reader.readAsDataURL(blob); 
+1

이렇게하면 원시 바이너리 데이터가 아닌 Base64로 인코딩 된 데이터가 서버로 전송됩니다. – Qualcuno

+0

Base64를 검색하고 변환 할 수 있습니까? 아니면 파일을 왜곡할까요? – SolidCloudinc

+0

@ SolidCloudinc 당신은 할 수 있고 그것은 파일을 왜곡하지 않을 것입니다. 그러나 이로 인해 많은 오버 헤드가 발생한다는 것을 기억하십시오. base64로 변환하는 시간과 메모리 사용량 등을 처리하는 시간이 더 걸립니다. 또한 base64로 인코딩 된 문자열은 ~ 33 % 더 커지므로 더 많은 대역폭을 사용합니다. (추신 : 내 의견에 태그를 기억하십시오!) – Qualcuno

0

JavaScript는 현재 바이너리 데이터로 작업하기에 최상의 언어는 아닙니다. 널리 보급되고 있지만 최신 브라우저에서만 (특히 IE10 + 및 모바일 지원 만 부분적 일 수 있음).

따라서 XHR2 (browser support)와 함께 바이너리 데이터를 보낼 수 있습니다. XHR2를 사용하는 것은 매우 쉽습니다. 여기서는 아주 좋은 기사 인 http://www.html5rocks.com/en/tutorials/file/xhr2/을 읽을 수 있습니다. 비동기 요청을 관리하기 위해 jQuery를 사용하려면 FormData와 여기에 설명 된 트릭을 사용해야합니다. https://stackoverflow.com/a/13333478/192024

추신 : 때로는 문제가있을 수 있으므로 blob 데이터를 MySQL 데이터베이스에 저장하는 데주의하십시오. 특히 큰 파일로!

관련 문제