UNPKG

wechat-work

Version:
71 lines (64 loc) 2.28 kB
import { createWriteStream, unlinkSync } from "fs"; import { get } from "https"; import { AccessToken, CommanderParent } from "../core"; import { doPost } from "../core/http-helper"; import { ReadStream } from 'fs' // tslint:disable-next-line: variable-name import FormData from "form-data"; export type MediaType = "image" | "voice" | "video" | "file"; export class MediaCommander extends CommanderParent { constructor(accessToken: AccessToken) { super(accessToken); } public async download(mediaId: string, destPath: string) { await this.accessToken.ensureNotExpired(); const url = `https://qyapi.weixin.qq.com/cgi-bin/media/get?access_token=${ this.accessToken.accessToken }&media_id=${mediaId}`; return new Promise((resolve, reject) => { const file = createWriteStream(destPath); get(url, response => { response.pipe(file); file.on("finish", () => { file.close(); resolve(file.bytesWritten); }); }).on("error", err => { unlinkSync(destPath); reject(err); }); }); } public async uploadTemp(stream: ReadStream, fileType: MediaType, filename: string) { await this.accessToken.ensureNotExpired(); const formData = new FormData(); formData.append("file", stream as any); formData.append("filename", filename); const res: { type: MediaType, media_id: string, created_at: string, } = await doPost( `https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token=${this.accessToken.accessToken}&type=${fileType}`, formData, { "Content-Type": "multipart/form-data" } ); return { createdAt: new Date(parseInt(res.created_at, 10) * 1000), mediaId: res.media_id, type: res.type, }; } public async uploadImage(stream: ReadStream, filename: string) { await this.accessToken.ensureNotExpired(); const formData = new FormData(); formData.append("file", stream as any); formData.append("filename", filename); const res: { url: string } = await doPost( `https://qyapi.weixin.qq.com/cgi-bin/media/uploadimg?access_token=${this.accessToken.accessToken}`, formData, { "Content-Type": "multipart/form-data" } ); return res; } }