首先获取微信签名,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. Shell命令-文件及目录操作之pwd、rm

    文件及目录操作 - pwd.rm 1.pwd:显示当前所在位置信息 pwd命令的功能说明 pwd命令用于显示当前工作目录的绝对路径,以便在各个目录间来回切换. pwd命令的语法格式 pwd [OPTI ...

  2. vhdl 数组

    TYPE matrix_index is array (511 downto 0) of std_logic_vector(7 downto 0);signal cnt_freq : matrix_i ...

  3. js实现一键导出Excel

    演示地址:https://xibushijie.github.io/static/ExportToExcel.html <!DOCTYPE html> <html lang=&quo ...

  4. Go语言中的string知识点

    1.Go语言String的本质就是一个[]byte,所以他们之间可以互相转换,byte数组的长度就是字符串的长度. func StringTest1() { str := "Hello,Wo ...

  5. Vivado如何使用命令行创建工程

    前言 vivado中采用TCL脚本语言来作为其命令解释语言.除去可以普通的图形界面流程还可以使用tcl脚本创建工程并导入相关源文件.   流程 1.首先还是要打开vivado图形主界面. 2.在某路径 ...

  6. Transaction check error: file /etc/rpm/macros.ghc-srpm from install of redhat-rpm-config-9.1.0-80.el7.centos.noarch conflicts with file from package epel-release-6-8.noarch Error Summary ----------

    ./certbot-auto certonly 报错: Transaction check error:   file /etc/rpm/macros.ghc-srpm from install of ...

  7. 天气预测(CNN)

    import torch import torch.nn as nn import torch.utils.data as Data import numpy as np import pymysql ...

  8. flv.js怎么用?全面解读flv.js代码

    flv.js项目的代码有一定规模,如果要研究的话,我建议从demux入手,理解了demux就掌握了媒体数据处理的关键步骤,前面的媒体数据下载和后面的媒体数据播放就变得容易理解了. 先普及点背景知识,为 ...

  9. 指数型生成函数 及 多项式求ln

    指数型生成函数 我们知道普通型生成函数解决的是组合问题,而指数型生成函数解决的是排列问题 对于数列\(\{a_n\}\),我们定义其指数型生成函数为 \[G(x) = a_0 + a_1x + a_2 ...

  10. 栈&队列

    队列部分 普通队列 举个形象的例子:排队买票. 有一列人在排队买票,前面来的人买完票就离开,后面来的人需要站在最后--依次类推. 在计算机中,数据结构队列有一个头指针和尾指针,头指针加一就代表有一个数 ...