使用 nodeJs 开发微信公众号(上传图片)

在给用户发送消息中涉及到的素材(图片、视频、音频、文章等)需要事先传到微信服务器,然后获得媒体id(media_id),然后把 media_id 传递给用户

上传分上传临时素材(只保存三天)和上传永久素材

上传永久素材只有在认证完成后才有权限

上传素材的提前条件就是获取 access_token,获取方法参考: https://www.cnblogs.com/xiaoliwang/p/10196102.html

这里采用上传的流程为:管理员上传图片到第三方服务器 -> 服务器保存资源获取本地存储路径 -> 将资源上传到微信服务器获取 media_id -> 将本地路径和media_id 一齐存储在数据表中

这里采用multer实现上传

var express = require(‘express‘)
var path = require(‘path‘)
var router = express.Router()
var multer = require(‘multer‘)
//uuid工具可以生成唯一标示 需要安装
var UUID = require(‘uuid‘)
var request = require(‘request‘)
var fs = require(‘fs‘)

const MediaModel = require(‘../model/media‘)

//临时路径
var baseApi = `https://api.weixin.qq.com/cgi-bin/media/upload`
//永久路径
// var baseApi = `https://api.weixin.qq.com/cgi-bin/material/add_material`

//设置保存规则
var storage = multer.diskStorage({
    //destination:字段设置上传路径,可以为函数
    destination: path.resolve(__dirname, ‘../upload‘),

    //filename:设置文件保存的文件名
    filename: function(req, file, cb) {
        let extName = file.originalname.slice(file.originalname.lastIndexOf(‘.‘))
        let fileName = UUID.v1()
        cb(null, fileName + extName)
    }
})

//设置过滤规则(可选)
var imageFilter = function(req, file, cb){
    var acceptableMime = [‘image/jpeg‘, ‘image/png‘, ‘image/jpg‘, ‘image/gif‘]
    //微信公众号只接收上述四种类型的图片
    if(acceptableMime.indexOf(file.mimetype) !== -1){
        cb(null, true)
    }else{
        cb(null, false)
    }
}

//设置限制(可选)
var imageLimit = {
    fieldSize: ‘2MB‘
}

//创建 multer 实例
var imageUploader = multer({
    storage: storage,
    fileFilter: imageFilter,
    limits: imageLimit
}).array(‘photos‘, 12)    //定义表单字段、数量限制

var videoFilter = function(req, file, cb){
    var acceptableMime = [‘video/mp4‘]
    //微信公众号只接收上述四种类型的图片
    if(acceptableMime.indexOf(file.mimetype) !== -1){
        cb(null, true)
    }else{
        cb(null, false)
    }
}

var videoUploader = multer({
    storage: storage,
    fileFilter: videoFilter,
    limits: {
        fieldSize: ‘10MB‘
    }
}).array(‘video‘, 10)

router.post(‘/image‘, imageUploader, function(req, res, next) {
    var api = `${baseApi}?access_token=${global.accessToken}&type=image`
    req.files.forEach(file => {
        var formData = {
            media: fs.createReadStream(file.path)
        }
        request.post({url: api, formData: formData}, function(err,response,body){
            if(err) {
                console.log(‘上传图片失败‘ , err);
                return
            }
            let data = {
                media_id: JSON.parse(response.body).media_id,
                local_url: path.join(path.resolve(__dirname, ‘../upload‘), file.filename),
                type: ‘image‘
            }       //保存数据库
            MediaModel.create(data).then(res => {
                console.log(`保存图片${res.dataValues.media_id}成功`);
            })
        })
    })
})

router.post(‘/video‘, videoUploader, function(req, res, next) {
    console.log(req.files);
})

module.exports = router

原文地址:https://www.cnblogs.com/xiaoliwang/p/10196437.html

时间: 2024-11-08 21:29:14

使用 nodeJs 开发微信公众号(上传图片)的相关文章

NodeJs 开发微信公众号(四)微信网页授权

微信的网页授权指的是在微信公众号中访问第三方网页时获取用户地理.个人等信息的权限.对于开发了自己的网页app应用时,获取个人的信息非常重要.上篇博客讲到了注册时可以获取用户的信息,很多人会问为什么还需要网页授权这种方式去获取呢,直接从数据库中读取不就可以了吗?这样的做的原因是服务器会话时间终究是有限的,关注后我们设置的会话一般在半个月左右,半个月后就需要重新生成会话,而这时就需要网页授权的openid帮忙了.况且,用户的信息也是会刷新的,虽然这种情况很少发生,但是我们至少应该确保信息是有一定的更

NodeJs 开发微信公众号(一)准备工作

前言 大概是一个月前,自己用业余时间做了一个微信公众号.微信开发,尤其是对后台不熟悉的人来说显得尤其困难.首先要克服的是后台语言(nodejs)的一些不熟悉困难,其次,也是最大的一点困难是在跟微信交互过程.借助各种工具和几位朋友的帮助,总算把各种困难解决,并且在自己计划的时间内建立起来公众号.第一次个人独立完成了一个网站的开发,对于自己的知识提升不少.微信公众号现在是html5应用的一个重要平台,许许多多的同行都陆续加入到这个行列.接下来一个月打算写一些我个人在走这条路的心得,每一章结尾都会把参

使用NodeJs开发微信公众号(一)

准备工作 1.首先注册自己的微信公众号. 微信公众号现在分为订阅号,服务号,企业号,服务号和企业号不对个人开发者开放,所以我们只能选择订阅号. 但是订阅号也有认证和未认证之分,认证的订阅号支持的接口更多也更高级,下图是微信的接口权限图,只截取了一部分. 如果我们想测试这些接口怎么办?我们可以申请微信的测试账号,测试账号只能用于测试接口,不能用于真实的项目.下面就看看怎么申请测试账号吧. 1.1进入微信公众平台首页 https://mp.weixin.qq.com/ 1.2在下方的账号分类里找到订

NodeJs 开发微信公众号(三)微信事件交互

微信公众号有个规则,一旦开启了开发者模式,其他的常规功能就都必须通过接口调用完成.比如说自定义菜单功能,必须通过发送post请求的方式生成.本章就通过关注到取消关注的整个过程来谈一谈nodejs是怎么样与微信交互的.这些功能的入口就是你在测试公众号里面填写的URL(以下用/login/wechat代替). 事件交互 扫码关注微信公众号后,微信会调用你的接口/login/wechat,并且附带一段xml信息,首先你需要获取一些签名,通过加密.排序比对是否与你填写的TOKEN一致,如果一致则进行xm

.net开发微信公众号(1)-启用开发者中心

开篇介绍 今天新开一个微信公众号开发经验分享的系列,主要是和大家分享在.net下开发微信公众号后台的一些经验,希望能给在.net下做微开发的小伙伴们一些参考.最近由于工作需要,开发了一个微信公众账号.我本人其实一直是做winform方向开发的,asp.net接触的也不多,现学现卖,有啥不足或不对的地方,希望大家发邮件告诉我,[email protected],一起学习,一起进步. 微信公众号其实火了很长一段时间了,应该是从2012开始火起来的.最近正好做一个这样的项目,在网上找资料的时候发现大家

PHP开发微信公众号(一)二维码的获取

要开发微信公众号,首先进行需要注册一个,然后认证.这就不用多说了. 当然如果没有,也可以去申请一个测试号来使用,地址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 申请成功后,你会得到一个appID 和 appsecret,这个就相当于你的开发者账号和密码. 开发模式如下图: 1.Access_Token的获取 对于这个access_token就是一个访问标识,其实不用想得太高深,它就好比是你进图书馆需要的图书卡:

从零开始开发微信公众号系列篇一:微信测试号申请

从零开始开发微信公众号系列片将会讲述微信账号申请,微信各个接口的实现,同时会为每个接口提供实现的demo.同时,此系列博文也不乏引用博友的一些思想内容,如有问题,欢迎联系于我,谢谢!由于该系列博文是工作之余总结的,有时没及时更新还望博友监督,提醒以达到共勉.俗话说,磨刀不误砍柴工,要进行微信公众号开发首先你得做好以下准备工作,那现在我们先来磨刀.很多人为微信开发账号发愁,这一点不用担心,腾讯还是挺人性化的,作为开发者可以申请测试号来进行微信公众号开发,这样我们就可以不用花冤枉钱去申请微信的订阅号

Spring Boot 开发微信公众号后台

Hello 各位小伙伴,松哥今天要和大家聊一个有意思的话题,就是使用 Spring Boot 开发微信公众号后台. 很多小伙伴可能注意到松哥的个人网站(http://www.javaboy.org)前一阵子上线了一个公众号内回复口令解锁网站文章的功能,还有之前就有的公众号内回复口令获取超 2TB 免费视频教程的功能(免费视频教程),这两个都是松哥基于 Spring Boot 来做的,最近松哥打算通过一个系列的文章,来向小伙伴们介绍下如何通过 Spring Boot 来开发公众号后台. 1. 缘起

C#开发微信公众号-学习笔记

由于最近要做微信服务号的开发,所以开始找相关说明和接口文档开始学,故把学习过程及注意事项记录一下,帮助想学习的快速上手.废话不多少了,直接上干货! 1.申请微信公众号 这个就不需要多说了吧,大家直接照着提示步骤走就行 2.建立服务器和微信端的链接 这一步的操作其实就是确认一下你的公众号跟你的服务器匹配成功了,所要做的工作其实很简单,就是微信会给你的服务器发一个请求,传过去几个参数,然后你把其中的timestamp,nonce参数获取到,在把你在微信设置服务器的页面填写的token这三个值按字典排