首先获取微信签名,Controller代码:

public ActionResult MutualHelpAdd()
{
var jssdkUiPackage = JSSDKHelper.GetJsSdkUiPackage(WeChatParameter._appID, WeChatParameter._appSecret, Request.Url.AbsoluteUri);
ViewBag.AppId = WeChatParameter._appID;
ViewBag.Timestamp = jssdkUiPackage.Timestamp;
ViewBag.NonceStr = jssdkUiPackage.NonceStr;
ViewBag.Signature = jssdkUiPackage.Signature; return View();
}

视图代码:

  wx.config({
//debug: true,
appId: '@ViewBag.AppId',
timestamp: '@ViewBag.Timestamp',
nonceStr: '@ViewBag.NonceStr',
signature: '@ViewBag.Signature',
jsApiList: [
'chooseImage',
'previewImage',
'uploadImage',
'downloadImage'
]
}); wx.ready(function () { // 5 图片接口
// 5.1 拍照、本地选图
var images = {
localId: [],
serverId: []
};
document.querySelector('#btnAddImage').onclick = function () {
wx.chooseImage({
count: , // 默认9,设置可以同时上传的图片数量
sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
success: function (res) {
images.localId = res.localIds;
//alert('已选择 ' + res.localIds.length + ' 张图片'); var i = , length = images.localId.length;
images.serverId = [];
function upload() {
wx.uploadImage({
localId: images.localId[i],
success: function (res) {
i++;
//alert('已上传:' + i + '/' + length);
images.serverId.push(res.serverId); //TODO: res.serverId 就是 media_id,根据它去微信服务器读取图片数据:自定义上传到自己服务器
var imageJson = $("#hdImageJson").val(); $.ajax({
type: 'post',
url: '/Common/AddImage',
async: false,
data: {
media_id: res.serverId,
imageJson: imageJson,
folderName:"MutualHelp"
},
success: function (data) {
if (data.ImageUrl != '') {
// 返回 图片在我们自己的服务器的url
var img = "<img class='task_image' src='/images/" + data.ImageUrl + "'/>";
$("#imgList").append(img);
$("#hdImageJson").val(data.ImageJson);
}
},
error: function (err) { }
}) if (i < length) {
upload();
}
},
fail: function (res) {
alert(JSON.stringify(res));
}
});
}
upload(); }
});
}; });

图片保存到本地服务器方法:

  /// <summary>
/// 公用 微信 上传图片方法
/// </summary>
/// <param name="media_id"></param>
/// <param name="imageJson"></param>
/// <returns></returns>
public JsonResult AddImage(string media_id, string imageJson,string folderName)
{
var imgUrl = "";
try
{
List<ImageList> curImageResult;
if (!string.IsNullOrEmpty(imageJson))
{
curImageResult = JsonConvert.DeserializeObject<List<ImageList>>(imageJson);
}
else
{
curImageResult = new List<ImageList>();
}
var accessToken = AccessTokenContainer.TryGetAccessToken(WeChatParameter._appID, WeChatParameter._appSecret); System.IO.MemoryStream stream = new System.IO.MemoryStream();
MediaApi.Get(accessToken, media_id, stream);
Image img = Image.FromStream(stream);
var imgName = DateTime.Now.ToString("yyyyMMddhhss");
var fileSaveUrl =string.Format(FilePath + "/{0}/" + imgName + ".jpg", folderName);
imgUrl = string.Format("/{0}/" + imgName + ".jpg", folderName);
img.Save(fileSaveUrl); var imageEntity = new ImageList
{
ImageKey = imgName,
ImageUrl = imgUrl,
UploadTime = DateTime.Now
};
curImageResult.Add(imageEntity); imageJson = JsonConvert.SerializeObject(curImageResult);
}
catch (Exception ex)
{
imgUrl = "";
} var result = new
{
ImageJson = imageJson,
ImageUrl = imgUrl
};
return Json(result);
}

.net mvc 使用盛派Senparc.Weixin 上传图片接口的更多相关文章

  1. Senparc.Weixin.MP SDK 微信公众平台开发教程(五):使用Senparc.Weixin.MP SDK

    Senparc.Weixin.MP SDK已经涵盖了微信6.x的所有公共API. 整个项目的源代码以及已经编译好的程序集可以在这个项目中获取到:https://github.com/JeffreySu ...

  2. 微信支付 V3 开发教程(一):初识 Senparc.Weixin.TenPayV3

    前言 我在 9 年前发布了 Senparc.Weixin SDK 第一个开源版本,一直维护至今,如今 Stras 已经破 7K,这一路上得到了 .NET 社区的积极响应和支持,也受到了非常多的宝贵建议 ...

  3. Senparc.Weixin.MP SDK 微信公众平台开发教程(九):自定义菜单接口说明

    上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明>介绍了如何通过通用接口获取AccessToken,有了AccessToken,我们就可以来操作 ...

  4. Senparc.Weixin.MP SDK 微信公众平台开发教程(二十):使用菜单消息功能

    在<Senparc.Weixin.MP SDK 微信公众平台开发教程(十一):高级接口说明>教程中,我们介绍了如何使用“客服接口”,即在服务器后台,在任意时间向微信发送文本.图文.图片等不 ...

  5. Senparc.Weixin SDK v5.0 升级公告

    经过五年半的持续维护,Senparc.Weixin SDK 逐步丰满和完善,在升级的过程中,我们为基础库(Senparc.Weixin.dll)加入了许多通用的功能,例如加密/解密算法.通用缓存方法等 ...

  6. Senparc.Weixin.MP SDK 微信公众平台开发教程(二十二):如何安装 Nuget(dll) 后使用项目源代码调试

    最近碰到开发者问:我使用 nuget 安装了 Senparc.Weixin SDK,但是有一些已经封装好的过程想要调试,我又不想直接附加源代码项目,这样就没有办法同步更新了,我应该怎么办? 这其实是一 ...

  7. Senparc.Weixin.MP SDK 微信公众平台开发教程(二十二):在 .NET Core 2.0/3.0 中使用 MessageHandler 中间件

    概述 在 <Senparc.Weixin.MP SDK 微信公众平台开发教程(六):了解MessageHandler> 中我们已经了解了 MessageHandler 的运行原理和使用方法 ...

  8. Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证

    要对接微信公众平台的"开发模式",即对接到自己的网站程序,必须在注册成功之后(见Senparc.Weixin.MP SDK 微信公众平台开发教程(一):微信公众平台注册),等待官方 ...

  9. Senparc.Weixin.MP SDK 微信公众平台开发教程(四):Hello World

    =============  以下写于2013-07-20 ============= 这一篇文章其实可以写在很前面,不过我还是希望开发者们尽多地了解清楚原理之后再下手. 通过上一篇Senparc.W ...

随机推荐

  1. python之路3-元组、列表、字典、集合

    1.元组 特点:一旦创建,内容不可修改,又叫只读列表 a= ('wang','zhang','zhao') print(a.count('zhao')) print(a.index('wang')) ...

  2. Python——字符转换(int , bool ,str)

    while True: pass while 1: pass #效果相同,后者 效果更快 s = 1 y = bool (s) #结果为True,int只要不是0,就为真 s = 'abc' y = ...

  3. MySQL-ERROR 2003

    1.首先安装mysqld服务器,输入命令:mysqld --install 2.输入命令:mysqld --initialize-insecure 3.输入命令:net start mysql

  4. 七、Java多人博客系统-2.0版本-docker部署

    docker是当下很热门的技术,是对之前的部署系统方式的彻底改变.之前部署系统,需要安装数据库.初始化数据库,安装jdk,配置jdk,部署应用程序,修改配置文件等,很繁琐.一般现场运维人员很难搞定,现 ...

  5. MyBatis:二级缓存原理分析

    MyBatis从入门到放弃七:二级缓存原理分析 前言 说起mybatis的一级缓存和二级缓存我特意问了几个身边的朋友他们平时会不会用,结果没有一个人平时业务场景中用. 好吧,那我暂且用来学习源码吧.一 ...

  6. python 发送post和get请求

    摘自:http://blog.163.com/xychenbaihu@yeah/blog/static/132229655201231085444250/ 测试用CGI,名字为test.py,放在ap ...

  7. Kubernetes之StatefulSet

    什么是StatefulSet StatefulSet 是Kubernetes中的一种控制器,他解决的什么问题呢?我们知道Deployment是对应用做了一个简化设置,Deployment认为一个应用的 ...

  8. MySQL实战45讲学习笔记:事务隔离级别(第三讲)

    一.隔离性与隔离级别 1.事务的特性 原子性 一致性 隔离性 持久性 2.不同事务隔离级别的区别 读未提交:别人改数据的事务尚未提交,我在我的事务中也能读到.读已提交:别人改数据的事务已经提交,我在我 ...

  9. MS SQL Server 数据库连接字符串详解

    MS SQL Server 数据库连接字符串详解 原地址:http://blog.csdn.net/jhhja/article/details/6096565 问题 : 超时时间已到.在从池中获取连接 ...

  10. 基于Rabbit实现的RPC

    最近在学习项目中的通用技术,其中一个是在项目中会经常使用的基于RabbitMQ实现的RPC.这里一共有三个点要学习,分别是:RPC是什么?RabbitMQ是什么?如何使用RabbitMQ实现RPC.奔 ...