【发布时间】:2017-03-27 18:10:03
【问题描述】:
我一直在尝试将图像从 jQuery 上传到我的服务器到 PHP,但上传的内容始终是无效图像。我无法识别错误是否编码或解码错误。我该如何解决这个问题?
jQuery 代码
$("input[type=file]").change(function(event) {
$.each(event.target.files, function(index, file) {
var reader = new FileReader();
reader.onload = function(event) {
var object = {};
object.filename = document.querySelector('input[type=file]').files[0]['name'];;
object.data = encodeURI(event.target.result);
object.filetype = document.querySelector('input[type=file]').files[0]['type'];
files.push(object);
};
reader.readAsDataURL(file);
});
});
$("form").submit(function(form) {
$.each(files, function(index, file) {
$.ajax({url: "handle.php",
type: 'POST',
data: {fileName: file.filename, data: file.data, fileType: file.filetype},
success: function(data) {
$('#data').html(data);
}
});
});
files = [];
form.preventDefault();
});
PHP 代码
if (isset($_POST["data"]) || isset($_POST["fileName"])) {
$data = $_POST["data"];
$fileName = $_POST["fileName"];
$fileType = $_POST["filetype"];
$replace = "data:" . $fileType . ";base64,";
$filedata = str_replace($replace, "", $data); // echo $filedata;
$decodedData = urldecode($filedata); // echo $decodedData;
$fp = fopen('uploads/' . $fileName, "w");
fwrite($fp, $decodedData);
fclose($fp);
}
【问题讨论】:
-
为什么发送
base64编码的东西只是为了预览为什么不使用formData发送原始文件(文件控制)? -
@Novice 问题是我想处理多个文件,用户可能会选择一个文件,然后在上传文件之前将其删除,并且无法从原始 $_FILE[ 中删除文件'文件']。
-
是的,我同意,在下面添加了答案
-
不明白您对FormData 的问题...它比base64 更快且好约9 倍
标签: javascript php jquery image-uploading uploading