日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

微信 开发 图片 上传 阿里云 oss 服务器

發布時間:2023/12/10 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微信 开发 图片 上传 阿里云 oss 服务器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在做微信開發時,我需要將圖片上傳至阿里云OSS,思路是服務端下載微信圖片再轉存至OSS。

wx.chooseImage({count: 1, // 默認9sizeType: ['original', 'compressed'],sourceType: ['album', 'camera'],success: function (res) {var localIds = res.localIds;wx.uploadImage({localId: localIds[0], // 需要上傳的圖片的本地ID,由chooseImage接口獲得isShowProgressTips: 1, // 默認為1,顯示進度提示success: function (res) {var serverId = res.serverId; // 返回圖片的服務器端ID// do something ...// 調用自己搭建的服務端的api,傳入serverId,做獲取微信圖片上傳OSS的相關操作doSomething();}});} });

選擇圖片時只要選擇了compressed,微信就會自動幫我們壓縮圖片,官方文檔也說明上傳的多媒體文件會控制格式和大小,其中圖片控制在jpg格式和1M以下的大小。所以,基本不用考慮圖片過大的問題。實測中,8M的圖片壓縮后只有120KB左右。

將圖片先上傳至微信的服務器(最多保存3天),再通過微信的下載多媒體文件接(http://file.api.weixin.qq.com…)將圖片下載到服務器,再上傳至OSS(雖然有點繞,但可行)。

主要有三種方法處理

1、利用fs將圖片寫到本地

const fs = require('fs'); const request = require('require'); const OSS = require('ali-oss').Wrapper;const ossClient = new OSS({accessKeyId: 'your access key',accessKeySecret: 'your access secret',bucket: 'your bucket name',region: 'oss-cn-hangzhou' });// 需要獲取微信accessToken,這里不細說 const accessToken = 'access token'; const mediaId = 'xxxxxxx'; // 微信多媒體文件id const destPath = `weixin/images/201702/${mediaId}.jpg`; // OSS文件路徑,按自己喜歡構造咯 const wxReq = request(`http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=${accessToken }&media_id=${mediaId}`);// 將文件流pipe到本地文件 wxReq.pipe(fs.createWriteStream(`${mediaId}.jpg`)); wxReq.on('end', () => {co(function* () {const result = yield ossClient.putStream(destPath, fs.createReadStream(`${mediaId}.jpg`), {timeout: 30 * 60 * 1000});console.log('圖片上傳阿里云結果', result);fs.unlink(`${mediaId}.jpg`);// res.status(200).json(result);}).catch(err => {console.warn(err);//res.status(500).send('上傳文件出錯');}); });

這種方式需要頻繁地寫文件和刪文件,很不友好。

2、利用memory-streams模塊將圖片寫到內存

const request = require('require'); const OSS = require('ali-oss').Wrapper; const streams = require('memory-streams');const ossClient = new OSS({accessKeyId: 'your access key',accessKeySecret: 'your access secret',bucket: 'your bucket name',region: 'oss-cn-hangzhou' });const accessToken = 'access token'; const mediaId = 'xxxxxxx'; // 微信多媒體文件id const destPath = `weixin/images/201702/${mediaId}.jpg`; // OSS文件路徑 const writer = new streams.WritableStream(); const wxReq = request(`http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=${accessToken }&media_id=${mediaId}`);wxReq.pipe(writer); wxReq.on('end', () => {co(function* () {const result = yield ossClient.put(destPath, writer.toBuffer(), {timeout: 30 * 60 * 1000});console.log('圖片上傳阿里云結果', result);// res.status(200).json(result);}).catch(err => {console.warn(err);//res.status(500).send('上傳文件出錯');}); });

這種方式將圖片暫存在內存里面,那如果并發量很大,服務器內存爆炸。

3、將下載圖片的流直接寫入OSS文件

const request = require('require'); const OSS = require('ali-oss').Wrapper;const ossClient = new OSS({accessKeyId: 'your access key',accessKeySecret: 'your access secret',bucket: 'your bucket name',region: 'oss-cn-hangzhou' });const accessToken = 'access token'; const mediaId = 'xxxxxxx'; // 微信多媒體文件id const destPath = `weixin/images/201702/${mediaId}.jpg`; // OSS文件路徑 const wxReq = request(`http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=${accessToken }&media_id=${mediaId}`);wxReq.on('response', (response) => {// request的響應結果response可以作為讀取流傳給ossClientco(function* () {const result = yield ossClient.putStream(destPath, response, {timeout: 30 * 60 * 1000});console.log('圖片上傳阿里云結果', result);// res.status(200).json(result);}).catch(err => {console.warn(err);//res.status(500).send('上傳文件出錯');}); });

總結

以上是生活随笔為你收集整理的微信 开发 图片 上传 阿里云 oss 服务器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。