javascript - 手机上传问题
迷茫
迷茫 2017-04-11 11:38:37
[JavaScript讨论组]

手机页面需要做上传,考虑到file提交问题多,所以用ajax提交base64位图片信息,到后台保存。
问题来了,小图片都没问题,但是4M左右的图片,base64位之后ajax传过去,大概20秒左右才响应回来,大家有没有好办法解决?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(5)
PHPz

手机端图片上传,可以用h5 canvas适当的压缩处理,再上传,ajax异步图片大的话确实上传很慢。

黄舟

如果是用户的照片可以用h5 canvas压缩后上传
如果一定要保持原比例上传,做个上传界面加进度条
https://segmentfault.com/a/11...
http://www.jb51.net/article/9...
供参考

PHPz

随手上一份 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>
ringa_lee

不知道你的图片是什么用途,但是移动端图片一般来说是不需要这么大的,建议你先在前端压缩一下再上传,避免原图可能会携带色彩配置、GPS等冗余信息,保持图片在1M以内大概效果会比较可以接受~

迷茫

同意楼上的,移动端有这个上传大文件需求,就要重新考虑一下了

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号