• 微信上传图片


    低版本的安卓上传图片是个问题,能出现选择图片,但点击图片后没有反应,转成base64也无解。于是改为用微信的接口上传。和之前的微信分享功能都是基于微信的jssdk。

    步骤比我们平时上传到服务器多一步,他是先调用chooseeImage方法获得用户要上传的图片id。然后上传到微信的服务器,微信的服务器默认只保存三天,所以还要让后台下载到自己的服务器上,然后返回地址,前端显示,这样才算完成。

         var time = '@ViewBag.Share.timestamp';
          wx.config({
            debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
            appId: '@ViewBag.Share.appId', // 必填,公众号的唯一标识
            timestamp: parseInt(time), // 必填,生成签名的时间戳
            nonceStr: '@ViewBag.Share.nonceStr', // 必填,生成签名的随机串
            signature: '@ViewBag.Share.signature',// 必填,签名,见附录1
              jsApiList: ["chooseImage", "previewImage", "uploadImage", "downloadImage"] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
          });
            wx.ready(function() {
                $(document).on("click", ".ctcon", function() {
                    wx.chooseImage({
                        count: 1, // 默认9
                        sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
                        sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
                        success: function (res) {
                            var localIds = res.localIds; // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片
                            uploadimg(localIds[0].toString());
    
                        }
                    });
                });

                    
    function uploadimg(lid) { wx.uploadImage({ localId: lid, // 需要上传的图片的本地ID,由chooseImage接口获得 isShowProgressTips: 1, // 默认为1,显示进度提示 success: function (res) { var serverId = res.serverId; // 返回图片的服务器端ID //alert(serverId); $.post("/Question/DownWxImage", { serverId: serverId }, function(res) { //alert(res.SaveName); if (res.Success === true) { // 显示图片 } }); }); } });

    count表示让用户选择图片的张数,然后这里的localIds要tostring。不然上传不了。uploadImage执行完了就可以通知让后台上传:

      public ActionResult DownWxImage(string serverId)
            {
                var token = getToken();
                 var url = string.Format("http://file.api.weixin.qq.com/cgi-bin/media/get?access_token={0}&media_id={1}",
                     token, serverId);//图片下载地址
    
                 HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
    
                 req.Method = "GET";
                 using (WebResponse wr = req.GetResponse())
                 {
                     HttpWebResponse myResponse = (HttpWebResponse)req.GetResponse();
    
                    var strpath = myResponse.ResponseUri.ToString();
                     WebClient mywebclient = new WebClient();
    
                     var path = "/Content/UploadFiles/mobile/";
                     var uploadpath = Server.MapPath(path);
                     if (!Directory.Exists(uploadpath))
                     {
                         Directory.CreateDirectory(uploadpath);
                     }
                     string saveName = Encrypt.GenerateOrderNumber() + ".jpg";
                     var savePath = uploadpath + saveName;
    
                     try
                     {
                         mywebclient.DownloadFile(strpath, savePath);
                         return Json(new { Success = true, SaveName = path + saveName });
                     }
                     catch (Exception ex)
                     {
                         savePath = ex.ToString();
                     }
    
                 }
                 return Json(new {Success = false, Message = "上传失败!"});
            }

     这样安卓是能上传了,但是也没有了进度条。

  • 相关阅读:
    聊聊 API Gateway 和 Netflix Zuul
    现行统编中学数学教科书有多烂
    线程池的成长之路
    Quick Guide to Microservices with Spring Boot 2.0, Eureka and Spring Cloud
    以太坊、Hyperledger Fabric和Corda,哪个更好?
    【SFA官方翻译】Spring WebFlux和Spring Cloud进行响应式微服务开发
    goroutine背后的系统知识
    goroutine与调度器
    MySQL命令,一篇文章替你全部搞定
    微服务架构技术栈选型手册(万字长文)
  • 原文地址:https://www.cnblogs.com/stoneniqiu/p/6910326.html
Copyright © 2020-2023  润新知