• 【原创】.Net 微信 JS-SDK图片、语音上传接口的实现(MVC)-(二 、上传图片服务器操作)


    上一篇文章,已经介绍过关于微信上传图片的前端JS-SDK , 如果有没看到第一篇的朋友, 可以先看看第一篇

    http://www.cnblogs.com/29boke/p/5483599.html

    好了,现在继续向大家介绍,我们.NET 是如何实现图片上传到自己的服务器的。

     

    上次提到, 

    function upload() {
                wx.uploadImage({
                    localId: images.localId[i],
                    success: function (res) {
                        i++;
                        //alert('已上传:' + i + '/' + length);
                        images.serverId.push(res.serverId);
                        $("#img2").append('<img src="'+res.localId+'"  style="50px; height:50px;"/ /> <br />');
                        downloadImage(res.serverId);
                        if (i < length) {
                            upload();
                        }
                    },
                    fail: function (res) {
                        alert(JSON.stringify(res));
                    }
                });
            }
     
    上传成功后, 会有一个serverId返回 ,  这个serverId 就是上传到微信服务器上, 返回在服务上的ID , 然后通过请求微信临时的素材,  请求接口,返回得到素材流
    获取临时素材
    公众号可以使用本接口获取临时素材(即下载临时的多媒体文件)。请注意,视频文件不支持https下载,调用该接口需http协议。
    本接口即为原“下载多媒体文件”接口。
    接口调用请求说明
    http请求方式: GET,https调用
    https://api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID
    请求示例(示例为通过curl命令获取多媒体文件)
    curl -I -G "https://api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID"
    参数说明
    参数    是否必须    说明
    access_token    是    调用接口凭证
    media_id    是    媒体文件ID
    返回说明
    正确情况下的返回HTTP头如下:
    HTTP/1.1 200 OK
    Connection: close
    Content-Type: image/jpeg 
    Content-disposition: attachment; filename="MEDIA_ID.jpg"
    Date: Sun, 06 Jan 2013 10:20:18 GMT
    Cache-Control: no-cache, must-revalidate
    Content-Length: 339721
    curl -G "https://api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID"
    错误情况下的返回JSON数据包示例如下(示例为无效媒体ID错误):
    {"errcode":40007,"errmsg":"invalid media_id"}

    详情可以参考, 官方的的JS-SDK ,  下面看我是如何实现的。

    当我们需要保存的时候, 用异步请求, Ajax , 然后请求到方法, 带上参数, ServerID 

    //获取临时素材
            //https://api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID 
    
            //微信下载图片
            public async Task<ActionResult> WeixinDownloadImage(string mediaId)
            {
                var token = WeixinConfig.TokenHelper.GetToken();//基础支持中的access_token
                var client = new HttpClient();
                var response = await client.GetAsync(string.Format("https://api.weixin.qq.com/cgi-bin/media/get?access_token={0}&media_id={1}", token, mediaId));
                var stream = await response.Content.ReadAsStreamAsync();
                Bitmap bitmap = new Bitmap(stream);
                string basePath = "/UploadPic/";
                string filename = DateTime.Now.Ticks + ".jpg";
                bitmap.Save(Server.MapPath(basePath) + filename);
    
                //返回地址
                string path = ConfigurationManager.AppSettings["Domain"].ToString();
                return Json(new { Link = path + basePath + filename }, JsonRequestBehavior.AllowGet);
            }

    这种是MVC的, 首先是得到Token了, 然后建立请求, httpclient ,  

    然后再用流来响应 ,

    再通过.NET里面的Draying里的一个图片流处理, BitMap 实现对图片流的操作, BitMap 里面已经封装好了Save 的方法, 只需要把服务器上的地址, 文件名, 都带上, 就可以直接保存到服务器 。 

    下面介绍第二种, 第二种是临时的素材, 保存三天, 用于特殊需求的,临时显示的素材, 因为是保存在微信端, 所以, 只能够用三天

    我们可以先把上传得到的返回serverid , 保存到数据库当中, 读取出来的时候, 

     在前端调用一下

    wx.downloadImage ({
    serverId: record.serverId,
    isShowProgressTips: 1,
    success: function (res) {
    record.localId = res.localId;
    });

    返回得到的localId 就是缓存了微信, 

    然后把 localId 放到一个<image src=""/>  src 里面, 就可以直接看到图片了。

    当然,这种做法, 是无法通过预览接口来看的, 有兴趣的朋友, 可以尝试下 直接用接口放在 src 里面, 看能否显示出来。 

    今天就到这里了, 下一篇把语音的功能, 也一并带给大家, 感谢大家的收看 。 

  • 相关阅读:
    入门学习嵌入式260期手把手配套视频7个项目实战送书
    使用from 的setTimeOut方法实现定时关闭Form
    C#面试题
    《JS语法字典》网友总结
    简单SQL语句小结
    面试前的简历
    Hello World的17种写法(C#)(转贴)
    张芸京 偏爱
    关于我对.setTmp()的理解及应用
    VS 2005使用技巧
  • 原文地址:https://www.cnblogs.com/29boke/p/5503405.html
Copyright © 2020-2023  润新知