zoukankan      html  css  js  c++  java
  • HTML5 Canvas前台压缩图片并上传到服务器

    1.前台代码:

        <input id="fileOne" type="file" />
        <input id="btnOne" value="上传到服务器"  type="button"/>
        <canvas id="canvasOne"  width="1000" height="800"></canvas>
        <script>
            //读取本地文件
            var inputOne = document.getElementById('fileOne');
            inputOne.onchange = function () {
                //1.获取选中的文件列表
                var fileList = inputOne.files;
                var file = fileList[0];
                //读取文件内容
                var reader = new FileReader();
                reader.readAsDataURL(file);
                reader.onload = function (e) {
                    //将结果显示到canvas
                    showCanvas(reader.result);
                }
            }
            var canvas = document.getElementById('canvasOne');
            var ctx = canvas.getContext('2d');
            //指定图片内容显示
            function showCanvas(dataUrl) {
                //加载图片
                var img = new Image();
                img.onload = function () {
                    //缩小图片
                    //ctx.scale(0.5, 0.5);
                    ctx.drawImage(img, 0, 0, img.width, img.height);
                }
                img.src = dataUrl;
            }
            //将Canvas图片数据上传到服务器
            /*
            * 图片格式说明,存储图片大小 png > jpg> jpeg
            */
            $('#btnOne').on({
                click: function () {
                    //1.获取canvas中的图片数据
                    //var data = canvas.toDataURL('image/jpeg',0.2);
                    var data = canvas.toDataURL('image/jpeg');
                    data = data.split(',')[1];
                    //数据格式转换
                    data = window.atob(data);
                    var ia = new Uint8Array(data.length);
                    for (var i = 0; i < data.length; i++) {
                        ia[i] = data.charCodeAt(i);
                    }
                    var blob = new Blob([ia], { type: 'image/jpeg' });
                    //2.提交到服务器
                    var fd = new FormData();
                    fd.append('file', blob);
    
                    //提交到服务器
                    var xhr = new XMLHttpRequest();
                    xhr.open('post', '../ashx/upload.ashx', true);
                    xhr.onreadystatechange = function () {
                        if (xhr.readyState == 4 && xhr.status == 200) {
                            var data = eval('(' + xhr.responseText + ')');
                            if (data.success == true) {
                                //上传成功
                                var imgName = data.msg;
                                alert(imgName);
                            } else {
                                alert(data.msg);
                            }
                        } else {
                            //alert(xhr.readyState);
                        }
                    }
                    xhr.send(fd);
                }
            });
            
        </script>

    2.后台代码:

    /// <summary>
    /// 接收二进制上传的图片
    /// </summary>
    /// <returns></returns>
    public string UploadImg()
    {
        HttpRequest req = _Context.Request;
        if (req.Files.Count > 0)
        {
            string newname = Guid.NewGuid().ToString() + ".jpg";
            //接收二级制数据并保存
            Stream stream = req.Files[0].InputStream;
            byte[] dataOne = new byte[stream.Length];
            stream.Read(dataOne, 0, dataOne.Length);
            FileStream fs = new FileStream(TempFile + newname, FileMode.Create, FileAccess.Write);
            try
            {
                fs.Write(dataOne, 0, dataOne.Length);
            }
            finally
            {
                fs.Close();
            }
            return newname;
        }
        return "";
    }

  • 相关阅读:
    小M和天平(简单DP)
    前缀查询(维护字典树前缀和)
    假的字符串( trie树 + 拓扑)
    E. Two Teams(线段树+链表)
    B. Ugly Pairs(简单dfs)
    回文(牛客 https://ac.nowcoder.com/acm/problem/17062)
    Dubbo中CompletableFuture异步调用
    Dubbo消费者异步调用Future使用
    Dubbo消费者异步调用Future使用
    Dubbo服务暴露延迟
  • 原文地址:https://www.cnblogs.com/tianma3798/p/5101283.html
Copyright © 2011-2022 走看看