扫码关注官方订阅号
手机页面需要做上传,考虑到file提交问题多,所以用ajax提交base64位图片信息,到后台保存。问题来了,小图片都没问题,但是4M左右的图片,base64位之后ajax传过去,大概20秒左右才响应回来,大家有没有好办法解决?
业精于勤,荒于嬉;行成于思,毁于随。
手机端图片上传,可以用h5 canvas适当的压缩处理,再上传,ajax异步图片大的话确实上传很慢。
如果是用户的照片可以用h5 canvas压缩后上传如果一定要保持原比例上传,做个上传界面加进度条https://segmentfault.com/a/11...http://www.jb51.net/article/9...供参考
随手上一份 H5图片预览+canvas压缩+base64格式转换
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script src="https://cdn.bootcss.com/jquery/2.1.1/jquery.min.js"></script> </head> <body> <input type="file" id="img"> <p>原生图片预览</p> <img src="" alt="" id="preview" > <p>压缩后图片预览</p> <img src="" alt="" id="preview_compressed" > </body> </html> <script> $("#img").change(function(){ //预览 var fr = new FileReader(); fr.readAsDataURL(this.files[0]); fr.onload = function(e) { var base64Url = e.target.result; $('#preview').attr('src', base64Url); compress(base64Url); }; }) //压缩并获得base64编码 function compress(url){ var img = new Image(); img.src = url; img.onload = function(){ var canvas = document.createElement('canvas'); canvas.width = img.naturalWidth; canvas.height = img.naturalHeight; canvas.getContext("2d").drawImage(img, 0, 0); var compressedBase64 = canvas.toDataURL('image/jpeg', 0.5); //0.5为压缩质量 $('#preview_compressed').attr('src', compressedBase64) //这个就是压缩后的base64 } } </script>
不知道你的图片是什么用途,但是移动端图片一般来说是不需要这么大的,建议你先在前端压缩一下再上传,避免原图可能会携带色彩配置、GPS等冗余信息,保持图片在1M以内大概效果会比较可以接受~
同意楼上的,移动端有这个上传大文件需求,就要重新考虑一下了
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
手机端图片上传,可以用h5 canvas适当的压缩处理,再上传,ajax异步图片大的话确实上传很慢。
如果是用户的照片可以用h5 canvas压缩后上传
如果一定要保持原比例上传,做个上传界面加进度条
https://segmentfault.com/a/11...
http://www.jb51.net/article/9...
供参考
随手上一份 H5图片预览+canvas压缩+base64格式转换
不知道你的图片是什么用途,但是移动端图片一般来说是不需要这么大的,建议你先在前端压缩一下再上传,避免原图可能会携带色彩配置、GPS等冗余信息,保持图片在1M以内大概效果会比较可以接受~
同意楼上的,移动端有这个上传大文件需求,就要重新考虑一下了