使用js fileReader上传文件会导致文件损坏

时间:2017-12-04 16:43:20

标签: javascript php filereader fileapi

我正在尝试使用js文件阅读器和AJAX将文件上传到我的服务器。

我使用fileReader和{{3}}来读取文件并将其转换为字符串,然后通过AJAX请求将其发送到服务器。 这是我的客户端js代码:

function upload() {
    var file = document.getElementById('periodExcel').files[0];
    if (file) {
        console.log(file);
        var reader = new FileReader();
        reader.readAsText(file, file.type);
        console.log(reader);
        reader.onload = uploadAndRun;
    }
}
function uploadAndRun(event) {
    console.log(event);
    var result = event.target.result;
    $('#js').html(result);
    var fileName = document.getElementById('periodExcel').files[0].name; //Should be 'picture.jpg'

    $.post('./upload.php', {data: result, name: fileName}, function(result2){
        $('#php').html(result2);
    });
}

这是上传php脚本:

file_put_contents('upload/' . $_POST['name'], $_POST['data']);

它只是使用php file_put_contents函数编写文件。

我的问题是上传的文件已损坏且尺寸与原始文件不同(更大)。

我尝试使用php file_get_contents函数读取同一个文件并使用file_put_contents再次写入,结果文件很好,与原始文件相同。

然后我尝试比较两个字符串(来自文件阅读器的字符串和来自 file_get_contents 的字符串)并使用{{比较两个字符串1}},这使我发现来自strcmp的字符串大于来自fileReader的字符串。

那么,我的代码有什么问题,以及在使用file_get_contents函数时如何使用FileReader以这种方式上传文件。

1 个答案:

答案 0 :(得分:0)

您在PHP中使用了错误的集合。要使用$_FILES访问上传的文件流。 看这里: http://php.net/manual/en/reserved.variables.files.php
在这里:http://php.net/manual/en/features.file-upload.post-method.php

简而言之,PHP运行时负责从HTTP请求中读取上传流,将其本地存储在临时文件夹中,并公开上面的地图,以便您访问临时文件并可能将其移动到另一个位置(或者做任何事情)否则你需要做它)。