/// <summary>
        /// 导出到通讯录 生成微信头像跟VCF文件
        /// </summary>
        /// <returns></returns>
        [Route("User/Mp_Vcf")]
        [HttpPost]
        public string Mp_Vcf()
        {
            var UserId = RequestHelper.GetStringParam("UserId", string.Empty).Trim();
            var https = RequestHelper.GetStringParam("https", string.Empty).Trim();

try
            {
                if (string.IsNullOrEmpty(UserId))
                    return JsonHelper.JsonFormat(202, "操作失败", "用户信息ID不能为空!", DBNull.Value);
                if (string.IsNullOrEmpty(https))
                    return JsonHelper.JsonFormat(202, "操作失败", "用户信息地址不能为空!", DBNull.Value);

ProcApp p = new ProcApp();
                DataSet ds = p.Select_MpVcf(UserId);
                if (ds.Tables[0].Rows.Count > 0)
                    return JsonHelper.JsonFormat(200, "查询成功", "查询成功!", ds.Tables[0]);
                else
                {
                    ds = p.GetAgentInfo_MpInfo(UserId);
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        string UserImg = ds.Tables[0].Rows[0]["UserImg"].ToString();
                        string UserTitle = ds.Tables[0].Rows[0]["UserTitle"].ToString();
                        string UserAllianName = ds.Tables[0].Rows[0]["UserAllianName"].ToString();
                        string WeChat = ds.Tables[0].Rows[0]["WeChat"].ToString();
                        string RealName = ds.Tables[0].Rows[0]["RealName"].ToString();
                        string UserPhone = ds.Tables[0].Rows[0]["UserPhone"].ToString();
                        string AgentName = ds.Tables[0].Rows[0]["AgentName"].ToString();
                        string UpUserImg = string.Empty;

string strUrl_Vcf = UserPhone + DateTime.Now.Millisecond;  //一定要随机生成VCF文件 不然会文件内容会一致累加
                        FileStream fs = new FileStream((@"" + System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "Filters\\" + strUrl_Vcf + ".vcf"), FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);

StreamWriter sw = new StreamWriter(fs);
                        sw.WriteLine("BEGIN:VCARD");
                        sw.WriteLine("VERSION:3.0");
                        sw.WriteLine("N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:" + Str2ASCII(RealName));
                        sw.WriteLine("N:" + WeChat + "");
                        sw.WriteLine("FN:" + WeChat + "");
                        sw.WriteLine("ORG:" + RealName + "");
                        sw.WriteLine("TITLE:" + UserTitle + "");
                        sw.WriteLine("TEL;type=CELL;type=pref:" + UserPhone + "");
                        sw.WriteLine("item2.URL;type=pref:" + https + "");
                        sw.WriteLine("NOTE:三草两木(SASELOMO)始终从大自然中获取神奇力量,将传统美学文化与“极减-自然护肤”理念相结合,用心研制纯净、自然、有效的护肤品,帮助女性回归真实、自然、惊喜的肌肤状态!");

if (string.IsNullOrEmpty(UserImg))
                            UserImg = "https://img.saselomo.com/WxMp_Vcf/WxMpHead.png";

UpUserImg = SaveImageFromWeb(UserImg);
                        if (UpUserImg == "fail")
                            return JsonHelper.JsonFormat(202, "上传文件失败", "上传文件失败!", DBNull.Value);
                        else
                            sw.WriteLine("PHOTO;ENCODING=B;TYPE=PNG:" + GetBase64FromImage(UpUserImg));

sw.WriteLine("END:VCARD");
                        sw.Flush(); sw.Close();
                        fs.Dispose(); fs.Close();
                        strUrl_Vcf = ConfigurationManager.AppSettings["WxVcf_Url"] + "Filters/" + strUrl_Vcf + ".vcf";
                        if (!string.IsNullOrEmpty(UpUserImg) && !string.IsNullOrEmpty(strUrl_Vcf))
                        {
                            if (p.Insert_MpVcf(UserId, UpUserImg, strUrl_Vcf) > 0)
                            {
                                ds = p.Select_MpVcf(UserId);
                                if (ds.Tables[0].Rows.Count > 0)
                                    return JsonHelper.JsonFormat(200, "查询成功", "查询成功!", ds.Tables[0]);
                                else
                                    return JsonHelper.JsonFormat(202, "查询失败", "添加成功,查询失败!", DBNull.Value);
                            }
                            else
                                return JsonHelper.JsonFormat(202, "查询失败", "添加失败,查询失败!", DBNull.Value);
                        }
                        else
                            return JsonHelper.JsonFormat(202, "查询失败", "上传的图片跟文件失败!", DBNull.Value);
                    }
                    else
                        return JsonHelper.JsonFormat(202, "查询失败", "查询不到对应用户的数据!", DBNull.Value);
                }
            }
            catch (Exception ex)
            {
                FileLog.Info("【User/Mp_Vcf】{UserId:" + UserId + "}[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "]" + ex.Message);
                return JsonHelper.JsonFormat(204, "操作失败", "网络异常,请联系管理员!", DBNull.Value);
            }
        }

/// <summary>
        /// 含中文字符串转ASCII
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public string Str2ASCII(String str)
        {
            try
            {
                //这里我们将采用2字节一个汉字的方法来取出汉字的16进制码
                byte[] textbuf = Encoding.Default.GetBytes(str);
                //用来存储转换过后的ASCII码
                string textAscii = string.Empty;

for (int i = 0; i < textbuf.Length; i++)
                {
                    textAscii += textbuf[i].ToString("X");
                }
                return textAscii;
            }
            catch (Exception ex)
            {
                return "含中文字符串转ASCII异常";
            }
        }

/// <summary>
        /// 图片转成64进制 流
        /// </summary>
        /// <param name="imagefile"></param>
        /// <returns></returns>
        public string GetBase64FromImage(string imagefile)
        {
            string strbaser64 = "";
            try
            {
                var myWebClient = new WebClient { Credentials = CredentialCache.DefaultCredentials };//获取或设置用于向Internet资源的请求进行身份验证的网络凭据
                var imgByte = myWebClient.DownloadData(imagefile);
                var ms = new MemoryStream(imgByte) { Position = 0 };
                byte[] arr = new byte[ms.Length];
                ms.Position = 0;
                ms.Read(arr, 0, (int)ms.Length);
                ms.Close();
                strbaser64 = Convert.ToBase64String(arr);
            }
            catch (Exception ex)
            {
                throw new Exception("Something wrong during convert!");
            }
            return strbaser64;
        }

/// <summary>
        /// 保存web图片到 阿里云
        /// </summary>
        /// <param name="imgUrl">web图片路径</param>
        /// <returns></returns>
        public string SaveImageFromWeb(string imgUrl)
        {
            string fileName = "WxMp";
            string defaultType = ".jpg";
            string[] imgTypes = new string[] { ".jpg", ".jpeg", ".png", ".gif", ".bmp" };
            string imgType = imgUrl.ToString().Substring(imgUrl.ToString().LastIndexOf("."));
            foreach (string it in imgTypes)
            {
                if (imgType.ToLower().Equals(it))
                    break;
                if (it.Equals(".bmp"))
                    imgType = defaultType;
            }
            var strUrl = string.Format("WxMp_Vcf/{0}/{1}/{2}", DateTime.Now.ToString("yyyy-MM-dd"), fileName, DateTime.Now.ToString("yyyyMMddHHmmssffff") + imgType);
            var myWebClient = new WebClient { Credentials = CredentialCache.DefaultCredentials };//获取或设置用于向Internet资源的请求进行身份验证的网络凭据
            var imgByte = myWebClient.DownloadData(imgUrl);
            var fso = new MemoryStream(imgByte) { Position = 0 };
            string strReturn = UploadFile2Aliyun(fso, strUrl);
            fso.Close();
            if (strReturn != "succeeded")                //上传到阿里云
                return "fail";
            else
                return ConfigurationManager.AppSettings["aliImageUrl"] + strUrl;
        }

/// <summary>
        /// 上传文件到aliyun的oss
        /// </summary>
        /// <param name="stream">文件流</param>
        /// <param name="key">文件路径</param>
        /// <param name="bucketName">容器名</param>
        /// <returns></returns>
        public string UploadFile2Aliyun(Stream stream, string key, string bucketName = "sclm-drp")
        {
            var accessKeyId = ConfigurationManager.AppSettings["AccessKeyId"];
            var accessKeySecret = ConfigurationManager.AppSettings["AccessKeySecret"];
            var endpoint = ConfigurationManager.AppSettings["Endpoint"];
            var client = new OssClient(endpoint, accessKeyId, accessKeySecret);

var rntMsg = "";
            try
            {
                //上传文件
                client.PutObject(bucketName, key, stream);
                //上传字符串
                // client.PutObject(bucketName, key, requestContent);
                //rntMsg = string.Format("Put object:{0} succeeded", key);
                rntMsg = string.Format("succeeded");
            }
            catch (OssException ex)
            {
                rntMsg = string.Format("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
                                   ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
            }
            catch (Exception ex)
            {

rntMsg = string.Format("Failed with error info: {0}", ex.Message);
            }
            return rntMsg;
        }

C#导出到通讯录 生成微信头像跟VCF文件 并把头像保存在阿里云相关推荐

  1. Java生成微信小程序二维码、上传至阿里云OSS

    依赖 <!-- 阿里云oss依赖 --><dependency><groupId>com.aliyun.oss</groupId><artifac ...

  2. iOS开发中通讯录转Vcard、写入vcf文件

    // MARK: ios9之后的通讯录转Vcard(版本3.0)字符串 +(NSString*)generateVCard30StringWithContacts:(NSArray<CNCont ...

  3. 利用python生成微信h5_Python的h5文件的创建与读取

    代码流程图:本章代码流程 这章是关于--make_dataset.py的 -------------------------------①------------------------------ ...

  4. 微信小程序学习记录(二)MQTT连接阿里云

    准备 微信小程序开发工具 MQTT.js库:https://unpkg.com/mqtt@2.18.8/dist/mqtt.min.js点开链接,右击页面内容另存到电脑. 开始 将MQTT.js复制到 ...

  5. iOS开发- 生成/解析.vcf文件

    vcf, 通讯录导出的一种格式. 一.生成vcf文件 如果要把我们iPhone通讯录里的数据, 生成vcf格式文件. 我们可以借助iCloud. 小技巧:通过iCloud导出iPhone通讯录的方法 ...

  6. 【阿里云课程】生成模型之GAN优化目标设计与改进

    大家好,继续更新有三AI与阿里天池联合推出的深度学习系列课程,本次更新内容为第11课中的一节,介绍如下: GAN优化目标设计与改进 本次课程是阿里天池联合有三AI推出的深度学习系列课程第11期,深度生 ...

  7. excel emoji php,PHP导出带有emoji表情的文本到excel文件出问题了

    前段时间做了一个导出用户信息(包含微信昵称)到excel文件的功能,一直没问题,今天突然有人反馈说导出来的数据有一些丢失了.我试了一下,发现有些数据导出没问题,有些有问题,某些列出现了空白,数据打印出 ...

  8. 阿里云服务器+微信公众号配置(Token验证不通过)

    推荐使用CentOS操作系统,本人在使用Ubuntu操作系统时安装第三方软件不是很顺利,导致在微信公众号服务器配置的Token验证失败不通过上浪费大量时间. 以下是 CentOS 和 Ubuntu的介 ...

  9. php emoji 保存 显示不出来,PHP导出带有emoji表情的文本到excel文件出问题了

    前段时间做了一个导出用户信息(包含微信昵称)到excel文件的功能,一直没问题,今天突然有人反馈说导出来的数据有一些丢失了.我试了一下,发现有些数据导出没问题,有些有问题,某些列出现了空白,数据打印出 ...

最新文章

  1. 将TVM集成到PyTorch上
  2. 信息与计算机科学专业自荐书,信息与计算科学专业的自荐信
  3. 2019腾讯广告算法大赛-冠军之路
  4. 史上最通俗易懂的IPFS入门介绍:01
  5. linux mail 密码错误,linux下mail使用故障解决
  6. C++ 面向对象的三大特性和五个原则?
  7. vim block vim_我如何学会爱Vim
  8. CTF爬虫:掌握这些特征,一秒识别密文加密方式
  9. 用项目案例彻底理解Spring IOC容器
  10. Ubuntu 16.04中vim编辑报错E138: Can‘t write viminfo file /root/.viminfo!
  11. SharePoint【学习笔记】-- SPWeb.EnsureUser()注意AllowUnsafeUpdates=true
  12. RK3288_Android7.1调试以太网ethernet
  13. 帆软认证报表工程师FCRA试题
  14. Java实现多元t分布函数(Multivariate t distributions)
  15. 软件工程大学生职业生涯规划_我的大学生职业生涯规划书(软件工程专业的职业生涯规划书)...
  16. RocketMQ 优雅停机技巧
  17. 帝国CMS Table '***.phome_ecms_news_data_' doesn't exist
  18. 详解 Flink Metrics 原理与监控实战
  19. 金融python入门书籍推荐_学习金融工程,有哪些推荐的入门书籍?
  20. gitlab找回已删除的分支

热门文章

  1. 如何对jmeter设置IP欺骗
  2. Deepstream yolov5 两种引擎(engine)生成方式
  3. dorado的autoform控件赋值、取值
  4. 每日新闻:中国移动今日发布OPhone战略 迎战联通iPhone(8月31日)
  5. 启动QQ失败,正在迁移个人文件夹,为了保证数据完整,请等待迁移完成后再启动QQ...
  6. 不知道做什么副业,如何选择副业,副业的重要性
  7. 使用Internet信息服务器(IIS)(转)
  8. 一批在线外语原版书库
  9. html卡片ui,炫酷网站带缩略图的文章卡片UI界面设计
  10. 简要分析竞技场3V3职业搭配及用途