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']并且在以 JSON 格式发布时$_POST['blob']不要神奇地填充到数组中。$_POST事实上,根据您的 JSON 格式,JSON 将解码为一个对象,而不是一个数组。

您将需要直接从输入中获取内容,如下所示:

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

或使用$HTTP_RAW_POST_DATA变量,如:

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