nodejs WeChatのウェブページapiに画像をアップロードしてアリ雲に転送して保存します.


最近は前人の残したnodejs WeChatプロジェクトをメンテナンスし始めました.関連書籍を急いで見ました.今はWeChat端末から「JS SDK」を呼び出してマルチメディアファイルのアップロードを実現し、アリークラウドサーバのクラウドストアに転送する必要があります.
背景が必要です
現在のWeChatプロジェクトは画像をアップロードする機能が必要です.展示の端にアリ雲が保存されていますので、雲にアップロードする方法も勉強します.実践に従って、技能の意味をよく把握して、実行します.
アリ雲記憶心得
アリ雲のアカウントはみんな知っています.雲の記憶はみんな「雲の記憶sdk」を押して自分の記憶を作ることができます.ファイルアップロードアプリの説明によると、アリ雲が4つの二つを記憶する必要があります.それぞれ:
  • レギオン:OSSサービスを申請する時のエリア、例えば'oss-cn-hagzhou'です.完全なエリアリストは[OSSサービスノード]で見ることができます.
  • accessKeyId:アリ雲のaccessKeyId
  • accessKeySecret:アリ雲のaccessKeySecret
  • bucketName:作成したbucket名
  • 以上の4つの変数を知ると、私たちは私たちの需要機能を実現することができます.
    機能開発
    WeChat端末アプリの呼び出しはみんなよく知っているはずです.まず、私達はフロントでWeChatインタフェースを呼び出してファイルをアップロードします.WeChatでアップロードした写真は3日間だけ保存しますので、クラウドに転送します.先端JSコードは以下の通りです.
    wx.chooseImage({
            count: 1, //   9
            sizeType: ['compressed'], //             ,      
            //sizeType: ['original'], //             ,      
            sourceType: ['album', 'camera'], //              ,      
            success: function (res) {
                var localId = res.localIds[0]; //          ID  ,localId    img   src      
                wx.uploadImage({
                    localId: localId,
                    success: function(res) {
                        var val = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token="+_accessToken+"&media_id="+res.serverId;//          ,_accessToke   7200    token。
                        $.ajax({
                            type: "GET",
                            data: {url: val,userId: _userId,name:'themeImage.jpg',timestamp:_timestamp},//        
                            dataType: 'json',
                            url: "upload",
                            beforeSend: function (request) {
                                request.setRequestHeader('X-CSRF-Token', _csrf);//  ajax     token,post    ,           
                            },
                            success: function (result) {
                                $('.cover-pic')
                                    .find('img')
                                    .attr('src', result.url);//            
                            }
                        });
    
                    },
                    fail: function(res) {
                        alert(JSON.stringify(res));
                    }
                });
    
            }
        });
    バックグラウンドのnodejsコードの構想:まずマイクロレターにアップロードされたリモートファイルを取得して、それをストリーミング形式でローカルファイルに保存します.(実はアリクラウドは直接にストリーミング形式でファイルをアップロードすることができます.しかし、私が実践している時はいつも問題があります.成功した人はメッセージを教えてください.ありがとうございます.)またメモリインターフェースを通じてアップロードします.コードは以下の通りです.
    まず阿里雲保存の構成を行います.4つのパラメータは上記の通りです.
    var co = require('co');
    var OSS = require('ali-oss');
    var client = new OSS({
        region: 'your region',
        accessKeyId: 'your accessKeyId',
        accessKeySecret: 'Your accessKeySecret',
        bucket: 'your bucket'
    });
    転送機能実行コード:
    var fs = require('fs');
    var request = require('request');
    app.get('/upload', function (req, res) {
         //            ,      
        var userId = req.query.userId;
        var timestamp = new Date().getTime();
        var name = req.query.name;
        var path = 'img_tmp/'+userId+'_'+timestamp+'_'+name;
        var key = userId+'/'+timestamp+'/'+name;
    
        //      ,       
        var url = req.query.url;
        var stream = request(url).pipe(fs.createWriteStream(path));
    
         //     
        stream.on('finish', function () {
            co(function* () {
                var result = yield client.put(key, path);
                console.log(result);
                res.json(result);
            }).catch(function (err) {
                console.log(err);
            });
        });
    });
    最後に、WeChat公式サイトに画像をアップロードし、アリークラウドに転送する機能を実現しました.皆さんも良い提案を持って、一緒に進歩してください.