Open vimer opened 8 years ago
具体接口?
uploadMedia 新增临时素材,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb) 详情请见:http://mp.weixin.qq.com/wiki/5/963fc70b80dc75483a271298a76a8d59.html Examples:
api.uploadMedia('filepath', type); Result:
{"type":"TYPE","media_id":"MEDIA_ID","created_at":123456789} Shortcut: * - exports.uploadImage(filepath);
exports.uploadVoice(filepath); exports.uploadVideo(filepath); exports.uploadThumb(filepath); * @param {String} filepath 文件路径 方法签名
方法 exports.uploadMedia()
参数 type(String)
媒体类型,可用值有image、voice、video、thumb
@JacksonTian var res = yield* api.uploadMedia("...", 'image'); 使用的时候,res返回还是一段buffer,按照文档应该返回: {"type":"TYPE","media_id":"MEDIA_ID","created_at":123456789}
co接口是不是有问题,我刚才试了下callback方式的 是正常的
分两次输出 第一次 application/json; encoding=utf-8 第二次 text/plain
为何会是2次?
单独请求。把根wechat的关联挪开。
var result = yield api.uploadMedia()
还是一样
@JacksonTian 我遇到和vimer 同样的问题,
const media = yield weChatApi.uploadMedia(achievementImg, "image")
console.log(media.toString("utf-8"))
总是报: {"errcode":41005,"errmsg":"media data missing hint: [dR0571sz59]"}
@logerzhu 我用callback形式了
@vimer 我重写了request方法,然后好了
WechatAPI.prototype.request = function * (url, opts) {
var options = {dataType: "json"};
Object.assign(options, this.defaults)
for (var key in opts) {
if (key !== 'headers') {
if (key === 'data' && opts[key] && typeof(opts[key].pipe) === 'function') {
options["stream"] = opts[key]
} else {
options[key] = opts[key]
}
} else {
if (opts.headers) {
options.headers = options.headers || {}
Object.assign(options.headers, opts.headers)
}
}
}
var res = yield urllib.requestThunk(url, options)
if (res.status < 200 || res.status > 204) {
var err = new Error(`url: ${url}, status code: ${res.status}`)
err.name = 'WeChatAPIError'
throw err
}
return res.data
}
@只能在5.5以下的版本使用,在5.5和5.5以上的版本就失效了,所以如果是5.5或者以上的可以用CURLFile这个
@JacksonTian 我也遇到同样的问题,调试了一下感觉是使用httpx库的文件数据没有写进去,data属性接受String|Buffer,而form是个流对象。如果直接改造request函数是否会对其他函数有影响
@miwoy httpx的opts.data可以是一个Stream啊。
@JacksonTian 我没看他的源码,只看了文档说接受String|Buffer,这个接口确实不能用,返回一段buffer,解码后是{"errcode":41005,"errmsg":"media data missing hint: [dR0571sz59]"},而同样的参数es5版本的接口是正常的,您可以测试一下,我的node版本是v6.2.0,co-wechat-api版本是v2.3.1
@JacksonTian 我引用了楼上那位大神的代码,上传接口可以了,但是会影响下载接口,于是我封装了一个给上传用的request专用接口
@miwoy pull request
我也是同样的问题
但是他的接口就是返回 text/plain 所以判断直接给buffer了
真是服了微信..........
uploadMedia可用的,await api.uploadMedia(buffer, 'image', 'test.jpg', ‘image/jpeg’);,但是返回的数据是 buffer,需要先 JSON.parse(buffer),才能获取到 media_id
按照官方的api,及co-wechat-api不是也是应该返回json吗? 然后我用JSON.parse来解析 得到的结果是 {"errcode":41005,"errmsg":"media data missing"}