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

showerXP 2015-10-02 10:39:36


<!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数据。
我通过base64上传文件。
同一个网段下,手机访问,这段代码也没有问题。只是手机访问我的阿里云ubuntu发现不会post数据。难道手机访问会跨域?
...全文
143 点赞 收藏 4
写回复
4 条回复
showerXP 2015年10月08日
这段代码没有问题,上传到阿里云之后,我的手机用自身的4G流量没有问题,家里wifi也没有问题,唯独单位wifi有问题。 还测试过小米4,三星s6等手机,单位wifi也没有问题。 据说华为p6有大小限制。而我测试的上述手机没有大小限制。 神一样的安卓?
回复 点赞
顾小林 2015年10月02日
你这段代码感觉和手机没多大关系。。
回复 点赞
以专业开发人员为伍 2015年10月02日
如果你只是问“跨域”问题,这就比较容易回答。手机访问怎么会不跨域呢?难道手机跟你的阿里云在同一个IP 局域网段吗?这是不可能的,没听说阿里巴巴把中国移动都兼并了的新闻啊。
回复 点赞
NANU-NANA 2015年10月02日
要上传的图片多大?
回复 点赞
发动态
发帖子
JavaScript
创建于2007-09-28

5.1w+

社区成员

22.3w+

社区内容

Web 开发 JavaScript
社区公告
暂无公告