MVC微信浏览器图片上传(img转Base64)

因公司业务需要,需要做一个微信公众号里的图片上传功能,主要用到的技术就是 img转base64 上到服务器

话不多说, 贴代码

  • 先看前端显示出来的东西
  • OK 图片不重要,看代码
 <!--微信图片上传-->
                <section class="logo-license">
                    <div class="half">
                        <div class="uploader">
                            <a class="license">
                                @if (!string.IsNullOrEmpty(Model.ClassImage))
                                {
                                    <img id="img-1" src="@Model.ClassImage" />
                                }
                                else
                                {
                                    <img id="img-1" src="/images/img_01.png" />
                                }

                            </a>
                            <input id="file0" class="file-3" name="imageData" type="file" width="130" height="130" accept="image/*" />
                        </div>
                        <div class="yulan">
                            <img src="" id="img0">
                            <div class="enter">
                                <button class="btn-2 fl">取消</button>
                                <input type="submit" class="btn-3 fr" value="确定" />
                            </div>
                        </div>
                    </div>
                    <div class="clear"></div>
                </section>

再看js代码

 <script>
        var subUrl = "";

        $("#file0").change(function () {
            //获取当前
            var objUrl = getObjectURL(this.files[0]);
            console.log(this.files[0])
            obUrl = objUrl;
            console.log("objUrl = " + objUrl);
            if (objUrl) {
                $("#img0").attr("src", objUrl).show();
            }
            else {
                $("#img0").hide();
            }
        });

        $(function () {
            $(".file-3").bind(‘change‘, function () {
                subUrl = $(this).val();
                $(".yulan").show();
                $(".file-3").val("");
            });

            $(".btn-3").click(function () {
                $("#img-1").attr("src", obUrl);
                $(".yulan").hide();
                $(".file-3").parents(".uploader").find(".filename").val(subUrl);

                var basepath = "";
                var ClassID = $("#ClassID").val();
                var TeacherID = $("#TeacherID").val();
                var image = new Image();
                image.crossOrigin = ‘‘;
                image.src = obUrl;
                image.onload = function () {
                    basepath = getBase64Image(image);
                    basepath = basepath.replace(/^data:image\/(png|jpg);base64,/, "")
                    //开始异步发送
                    $.ajax("/home/savenewsbackimage", {
                        data: JSON.stringify({ path: basepath, ClassID: ClassID, TeacherID: TeacherID }),
                        type: "POST", dataType: "text", contentType: "application/json;utf-8",
                        success: function (data) {
                            alert(data);
                        }
                    });
                }
            })
            $(".btn-2").click(function () {
                $(".yulan").hide();
            })
        });

        function qd() {
            var objUrl = getObjectURL(this.files[0]);
            obUrl = objUrl;
            console.log("objUrl = " + objUrl);
            if (objUrl) {
                $("#img0").attr("src", objUrl).show();
            }
            else {
                $("#img0").hide();
            }
        }

        function getObjectURL(file) {
            var url = null;
            if (window.createObjectURL != undefined) { // basic
                url = window.createObjectURL(file);
            } else if (window.URL != undefined) { // mozilla(firefox)
                url = window.URL.createObjectURL(file);
            } else if (window.webkitURL != undefined) { // webkit or chrome
                url = window.webkitURL.createObjectURL(file);
            }
            return url;
        }

        //img转码base64
        function getBase64Image(img) {
            var canvas = document.createElement("canvas");
            canvas.width = img.width;
            canvas.height = img.height;

            var ctx = canvas.getContext("2d");
            ctx.drawImage(img, 0, 0, img.width, img.height);
            var ext = img.src.substring(img.src.lastIndexOf(".") + 1).toLowerCase();
            var dataURL = canvas.toDataURL("image/" + ext);
            return dataURL;
        }

    </script>

再看服务器端代码

[HttpPost]
        public ActionResult SaveNewsBackImage(string path, string ClassID, string TeacherID)
        {
            //保存图片到服务器,
            string basePath = "/UploadPic/";

            string imgname = DateTime.Now.Ticks + ".jpg";

            string basepath = HttpContext.Server.MapPath(basePath);

            string Pic_Path = basepath + imgname;

            using (FileStream fs = new FileStream(Pic_Path, FileMode.Create))
            {
                using (BinaryWriter bw = new BinaryWriter(fs))
                {
                    byte[] data = Convert.FromBase64String(path);
                    bw.Write(data);
                    bw.Close();
                }
            }

            //把图片地址存到数据库

            string serpath = ConfigurationManager.AppSettings["Domain"].ToString();
            string classimagePath = serpath + basePath + imgname;

            var flag = new ClassBLL().SaveNewsBackImage(classimagePath, Convert.ToInt32(ClassID), Convert.ToInt32(TeacherID));
            return Content("上传成功");
        }

至此, 大家应该能看明白这个微信内置浏览器的上传方法了~  希望和我一样的朋友, 继续加油,奋斗~ 在路上

时间: 2024-10-09 20:26:00

MVC微信浏览器图片上传(img转Base64)的相关文章

.Net Core 图片上传FormData和Base64

缓冲和流式传输是上传文件的两种常用方案,这里主要演示流式传输. 1.Net Core MVC Form提交方式: 前端页面 form表单提交: 1 <form id="uploadForm"> 2 图片上传: <input type="file" name="file" multiple value="选择" onchange="doUpload()" id="ajaxfile&

Spring MVC MultipartFile实现图片上传

<!--Spring MVC xml 中配置 --><!-- defaultEncoding 默认编码;maxUploadSize 限制大小--><!-- 配置MultipartResolver 用于文件上传 使用spring的CommosMultipartResolver --> <beans:bean id="multipartResolver" class="org.springframework.web.multipart.c

MVC OF UEditor 图片上传 笔记

最近正巧需要用到UEditor ,因为需求,.需要把上传的图片数据上传到阿里云的OSS与记录图片到MS SQL中 . 不得已只能翻UEditor的实现代码>_<痛苦.遗憾的是研究了两天也没想明白 备忘笔记: UEditor 的图片存储函数位于UploadHandler.cs 的Process 之中. public UploadHandler(HttpContext context, UploadConfig config) : base(context) { this.UploadConfig

thinkcmf2.2 火狐浏览器图片上传以及谷歌图片上传打开稍慢

对目录中 admin/themes/simplebootx/asset/plupload.html 文件 进行更改如下图:

springMVC框架下——通用接口之图片上传接口

我所想要的图片上传接口是指服务器端在完成图片上传后,返回一个可访问的图片地址. spring mvc框架下图片上传非常简单,如下 1 @RequestMapping(value="/uploadImg", method=RequestMethod.POST) 2 @ResponseBody 3 public String uploadImg(@RequestParam(value="img")MultipartFile img){ 4 File f = new Fi

VUE2.0+VUE-Router做一个图片上传预览的组件

之前发了一篇关于自己看待前端组件化的文章,但是由于学习和实践的业务逻辑差异,所以自己练习的一些demo逻辑比较简单,打算用vue重构现在公司做的项目,所以在一些小的功能页面上使用vue来做的,现在写的这个是项目中用户反馈功能而来的,收获还是挺多的. 收获:dom操作=>数据操作       router的使用       组件的使用,具体总结放在尾部. 功能:1.上传图片 2.显示缩略图 3.可以删除 4.可以重新选择文件 先上成品图(主要抽取图片这块),自己在家主要做的功能,样式就不计较了.

移动端图片上传老失败

做移动端开发的时候,form里面的file后台经常获取不到,用foemdata也拿不到 找到了一个formdata的脚本 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-s

java图片上传(mvc)

最近有开始学起了java,好久没写文章了,好久没来博客园了.最近看了看博客园上次写的图片上传有很多人看,今天在一些篇关于java图片上传的.后台接收用的是mvc.不墨迹了,直接上图. 先看目录结构.idea开发. 一.图片上传还是使用的这款jq插件.前端部署这款插件,不用说了吧.效果图       二.前台代码只需要盖一个位置.因为是比较好用的插件.插件样式自行修改. 三.后台代码. 后面看不见的. 这个图片上传主要是自己写了几个函数.让图片储存更加方便.分成了年月日储存.但是后期遍历比较困难,

在ASP.NET MVC下实现单个图片上传, 客户端服务端双重限制图片大小和格式, 服务端裁剪图片

在"MVC文件图片ajax上传轻量级解决方案,使用客户端JSAjaxFileUploader插件01-单文件上传"一文中,使用JSAjaxFileUploader这款插件实现了单文件上传,在chrome, firefox下运行良好,但在某些版本的IE浏览器(比如IE8,IE9)下却无法正常运行,这可能是因为JSAjaxFileUploader插件在编写时没有考虑到某些低版本IE浏览器导致的.本篇,就在ASP.NET MVC4下实现单个图片上传,具体功能包括: 1.在客户端选择图片,并限