C#导出到通讯录 生成微信头像跟VCF文件 并把头像保存在阿里云
/// <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文件 并把头像保存在阿里云相关推荐
- Java生成微信小程序二维码、上传至阿里云OSS
依赖 <!-- 阿里云oss依赖 --><dependency><groupId>com.aliyun.oss</groupId><artifac ...
- iOS开发中通讯录转Vcard、写入vcf文件
// MARK: ios9之后的通讯录转Vcard(版本3.0)字符串 +(NSString*)generateVCard30StringWithContacts:(NSArray<CNCont ...
- 利用python生成微信h5_Python的h5文件的创建与读取
代码流程图:本章代码流程 这章是关于--make_dataset.py的 -------------------------------①------------------------------ ...
- 微信小程序学习记录(二)MQTT连接阿里云
准备 微信小程序开发工具 MQTT.js库:https://unpkg.com/mqtt@2.18.8/dist/mqtt.min.js点开链接,右击页面内容另存到电脑. 开始 将MQTT.js复制到 ...
- iOS开发- 生成/解析.vcf文件
vcf, 通讯录导出的一种格式. 一.生成vcf文件 如果要把我们iPhone通讯录里的数据, 生成vcf格式文件. 我们可以借助iCloud. 小技巧:通过iCloud导出iPhone通讯录的方法 ...
- 【阿里云课程】生成模型之GAN优化目标设计与改进
大家好,继续更新有三AI与阿里天池联合推出的深度学习系列课程,本次更新内容为第11课中的一节,介绍如下: GAN优化目标设计与改进 本次课程是阿里天池联合有三AI推出的深度学习系列课程第11期,深度生 ...
- excel emoji php,PHP导出带有emoji表情的文本到excel文件出问题了
前段时间做了一个导出用户信息(包含微信昵称)到excel文件的功能,一直没问题,今天突然有人反馈说导出来的数据有一些丢失了.我试了一下,发现有些数据导出没问题,有些有问题,某些列出现了空白,数据打印出 ...
- 阿里云服务器+微信公众号配置(Token验证不通过)
推荐使用CentOS操作系统,本人在使用Ubuntu操作系统时安装第三方软件不是很顺利,导致在微信公众号服务器配置的Token验证失败不通过上浪费大量时间. 以下是 CentOS 和 Ubuntu的介 ...
- php emoji 保存 显示不出来,PHP导出带有emoji表情的文本到excel文件出问题了
前段时间做了一个导出用户信息(包含微信昵称)到excel文件的功能,一直没问题,今天突然有人反馈说导出来的数据有一些丢失了.我试了一下,发现有些数据导出没问题,有些有问题,某些列出现了空白,数据打印出 ...
最新文章
- 将TVM集成到PyTorch上
- 信息与计算机科学专业自荐书,信息与计算科学专业的自荐信
- 2019腾讯广告算法大赛-冠军之路
- 史上最通俗易懂的IPFS入门介绍:01
- linux mail 密码错误,linux下mail使用故障解决
- C++ 面向对象的三大特性和五个原则?
- vim block vim_我如何学会爱Vim
- CTF爬虫:掌握这些特征,一秒识别密文加密方式
- 用项目案例彻底理解Spring IOC容器
- Ubuntu 16.04中vim编辑报错E138: Can‘t write viminfo file /root/.viminfo!
- SharePoint【学习笔记】-- SPWeb.EnsureUser()注意AllowUnsafeUpdates=true
- RK3288_Android7.1调试以太网ethernet
- 帆软认证报表工程师FCRA试题
- Java实现多元t分布函数(Multivariate t distributions)
- 软件工程大学生职业生涯规划_我的大学生职业生涯规划书(软件工程专业的职业生涯规划书)...
- RocketMQ 优雅停机技巧
- 帝国CMS Table '***.phome_ecms_news_data_' doesn't exist
- 详解 Flink Metrics 原理与监控实战
- 金融python入门书籍推荐_学习金融工程,有哪些推荐的入门书籍?
- gitlab找回已删除的分支
热门文章
- 如何对jmeter设置IP欺骗
- Deepstream yolov5 两种引擎(engine)生成方式
- dorado的autoform控件赋值、取值
- 每日新闻:中国移动今日发布OPhone战略 迎战联通iPhone(8月31日)
- 启动QQ失败,正在迁移个人文件夹,为了保证数据完整,请等待迁移完成后再启动QQ...
- 不知道做什么副业,如何选择副业,副业的重要性
- 使用Internet信息服务器(IIS)(转)
- 一批在线外语原版书库
- html卡片ui,炫酷网站带缩略图的文章卡片UI界面设计
- 简要分析竞技场3V3职业搭配及用途