1

ドラッグアンドドロップアップローダーがあります。ファイルリーダーを使用してデータをURLとして送信しています。

    var files = evt.dataTransfer.files;
for (var i = 0, f; f = files[i]; i++) {
    var start = 0;
    var stop = files[0].size - 1;
    var reader2 = new FileReader();
    var ext = f.name.substring(f.name.indexOf(".")+1);
    reader2.onloadend = function(evt) {
        if (evt.target.readyState == FileReader.DONE) { // DONE == 2
            $.post("/process/upload.php",{"blob":evt.target.result,"extension":ext},function(data){
                console.log(data);
            });
        }
    };
var blob = f.slice(start, stop + 1);
reader2.readAsDataURL(blob);
}

PHPはそれを受け取りますが、デコードすると「null」が返されます

$extension = $_POST['extension'];
$file = base64_decode($_POST['blob']);
$filePath = "../tmp/monkey.".$extension;
echo json_encode(base64_decode($_POST['blob']));

私も試しました:

if(file_put_contents($filePath,$file)){
    echo json_encode("it worked");
}else{
    echo json_encode("it failed");
}

編集:私はそれをデコードするまでずっとPOST情報を維持します。それで、それをデコードしたら、ファイルが無傷で保存できることをどのように判断しますか?

ファイルをデコードして保存するためのより良い方法はありますか?私は正確に何を間違っているのですか?

前もって感謝します!

4

1 に答える 1

2

$_POST['extension'] and $_POST['blob'] don't magically get populated into $_POST array when posting in JSON format. In fact based on your JSON format, the JSON will decode into an object, not an array.

You will need to get the contents directly from input like this:

$post = file_get_contents('php://input');
$post_obj = json_decode($post);
$extension = $post_obj->extension;
$file = base64_decode($post_obj->blob);

Or using $HTTP_RAW_POST_DATA variable like:

$post_obj = json_decode($HTTP_RAW_POST_DATA);
$extension = $post_obj->extension;
$file = base64_decode($post_obj->blob);
于 2012-09-18T16:33:10.200 に答える