手机压缩图片通过base64 上传 ajax不能post

showerXP 2015-10-01 11:18:02


<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>测试上传文件</title>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="../js/mobileFix.mini.js"></script>
<script type="text/javascript" src="../js/exif.js"></script>
<script type="text/javascript" src="../js/lrz.js"></script>
</head>
<style> body {
margin: 20px 20%;
color: #777;
text-align: center;
}</style>
<body>
<hr/>
<input type="file" accept="image/*"/>
<hr/>
<script type="text/javascript">
var input = document.querySelector('input');
input.onchange = function () {
lrz(this.files[0],
{width: 800, height: 600,quality:0.5,
before: function(){},
fail: function(){},
done: function (results) {
// 你需要的数据都在这里,可以以字符串的形式传送base64给服务端转存为图片。
var img = new Image();
$('body').append(img);
// 发送到后端
var xhr = new XMLHttpRequest();
var data = {
base64: results.base64,
size: results.base64.length // 校验用,防止未完整接收
};
xhr.open('POST', '1.php');
xhr.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
var result = JSON.parse(xhr.response);
result.error
? alert('服务端错误,未能保存图片')
//: demo_report('服务端实存的图片', result.src, result.size);
: img.src = result.src;
}
};
xhr.send(JSON.stringify(data)); // 发送base64

},
always: function(){

}
}
)};

</script>
</body>

</html>




<?php
$base64=file_get_contents("php://input"); //获取输入流
$base64=json_decode($base64,1);
$data = $base64['base64'];
preg_match("/data:image\/(.*);base64,/",$data,$res);
$ext = $res[1];
if(!in_array($ext,array("jpg","jpeg","png","gif"))){
echo json_encode(array("error"=>1));die;
}
$file=time().'.'.$ext;
$data = preg_replace("/data:image\/(.*);base64,/","",$data);
if (file_put_contents('../uploadFiles/'.$file,base64_decode($data))===false) {
echo json_encode(array("error"=>1));
}else{
echo json_encode(array("error"=>0,'src'=>'../uploadFiles/'.$file));

}



这段代码上传到ubuntu上安卓4.4手机访问有问题,pc端没有问题。自己电脑win,手机、pc都没有问题。
xhr.send(JSON.stringify(data)); // 发送base64
根本没有post数据。
...全文
136 点赞 收藏 6
写回复
6 条回复
showerXP 2015年10月08日
这段代码没有问题,上传到阿里云之后,我的手机用自身的4G流量没有问题,家里wifi也没有问题,唯独单位wifi有问题。 还测试过小米4,三星s6等手机,单位wifi也没有问题。 据说华为p6有大小限制。而我测试的上述手机没有大小限制。 神一样的安卓?
回复 点赞
傲雪星枫 2015年10月03日
直接使用jquery吧,这样可以更好解决兼容问题。
回复 点赞
showerXP 2015年10月02日
引用 2 楼 aitocsdn 的回复:
同意版主 你在安卓微信浏览器上测试的时候就会发现这个不是个例 有些是因为封了上传
我通过base64上传文件。 同一个网段下,手机访问,这段代码也没有问题。只是手机访问我的阿里云ubuntu发现不会post数据。难道手机访问会跨域?
回复 点赞
showerXP 2015年10月02日
引用 1 楼 xuzuning 的回复:
只要有一种客户端能够上传成功,就表示代码没有大问题。有的只是兼容性问题 既然已经使用了 jQuery,那为何不使用它提供的 ajax?至少兼容性工作他已替你做好了
事实上,之前用jq也做了一遍,问题一样,所以原生做了一遍。
回复 点赞
aitocsdn 2015年10月02日
同意版主 你在安卓微信浏览器上测试的时候就会发现这个不是个例 有些是因为封了上传
回复 点赞
xuzuning 2015年10月02日
只要有一种客户端能够上传成功,就表示代码没有大问题。有的只是兼容性问题 既然已经使用了 jQuery,那为何不使用它提供的 ajax?至少兼容性工作他已替你做好了
回复 点赞
发动态
发帖子
基础编程
创建于2007-09-28

9734

社区成员

14.0w+

社区内容

从PHP安装配置,PHP入门,PHP基础到PHP应用
社区公告
暂无公告