手机压缩图片通过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数据。难道手机访问会跨域?
...全文
238 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
showerXP 2015-10-08
  • 打赏
  • 举报
回复
这段代码没有问题,上传到阿里云之后,我的手机用自身的4G流量没有问题,家里wifi也没有问题,唯独单位wifi有问题。 还测试过小米4,三星s6等手机,单位wifi也没有问题。 据说华为p6有大小限制。而我测试的上述手机没有大小限制。 神一样的安卓?
顾小林 2015-10-02
  • 打赏
  • 举报
回复
你这段代码感觉和手机没多大关系。。
  • 打赏
  • 举报
回复
如果你只是问“跨域”问题,这就比较容易回答。手机访问怎么会不跨域呢?难道手机跟你的阿里云在同一个IP 局域网段吗?这是不可能的,没听说阿里巴巴把中国移动都兼并了的新闻啊。
NANU-NANA 2015-10-02
  • 打赏
  • 举报
回复
要上传的图片多大?
JSON自动美化(页面自动检测并格式化) JSON手动美化(粘贴文本、手动格式化) JSON比对工具(支持左右两个JSON片段进行键值对比较) 字符串编解码(Unicode/UTF8/Base64/MD5) 代码美化工具(HTML/CSS/JS/XML/SQL) 代码压缩工具(HTML/CSS/JS) 二维码生成器(支持当前页面、图片、链接、选中的文字生成QrCode) 二维码解码器(支持网页二维码右键解码) 简易Postman(Api接口测试,模拟HEAD/GET/POST方式) 网页滚动截屏(将当前整个网页转为图片并保存) Markdown转换(支持Markdown与HTML的互转) 页面取色工具(滑动鼠标随意取色) Js正则表达式(正则测试、常用正则列表) 时间(戳)转换(Unix戳与本地时间的互转) 图片Base64(任意图片转DataURI格式) 随机密码生成(任意字符、任意长度、随机生成) 编码规范检测(HTML/CSS/JS规范检测) 页面性能检测(页面响应时间、Header监测) 页面栅格标尺(页面栅格化、屏幕标尺) 多维小工具集(进制转换、RGB/HEX颜色转换、Crontab、还款计算器等) 网页油猴工具(网页特效、网页定制、脚本注入、自动刷新等) Ajax调试功能(需在控制台中使用) 网页编码设置(UTF-8、GBK、日文、韩文等) 我的便签笔记(便签笔记,支持导出) 人像背景移除(将人物照片中的背景移除:抠图工具)

87,929

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧