我正在尝试使用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以这种方式上传文件。
答案 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请求中读取上传流,将其本地存储在临时文件夹中,并公开上面的地图,以便您访问临时文件并可能将其移动到另一个位置(或者做任何事情)否则你需要做它)。