2017-10-25 3 views
2

SDKプラットフォーム:Node.jsボットエミュレータからファイル(.pdf、.jpg..jpeg)をアップロードし、ファイルをローカルドライブに保存せずにバイナリ(base64)に変換する方法は?

ボットエミュレータからファイル(.pdf、.jpg..jpeg)をアップロードし、ローカルドライブにファイルを保存せずにバイナリ(base64)に変換する方法を教えてください。

コード例:

var url = session.message.attachments[0].contentUrl; 
var fileName=session.message.attachments[0].name; 
var encodedData = new Buffer(fs.createWriteStream(url+"/"+fileName), 'binary').toString('base64'); 

上記のようなもの、それは私のために働いていません。

予想される動作:

我々はBOTエミュレータからファイルをアップロードし、バイナリデータにファイルの内容を変換する必要があります。

実際の結果:ここで

ERROR: ENOENT: no such file or directory, open 'D:\User\projects\messages\http:\localhost:61058\v3\attachments\ne1gmlim5kfg\views\original\filename.pdf'

が必要とされていない現在のディレクトリを追加します。参考のため

https://github.com/Microsoft/BotBuilder/issues/3628

答えて

1

ここではメモリにそれをコードファイルやBASE64をダウンロードする例を示します

var bot = new builder.UniversalBot(connector, function (session) { 
    var msg = session.message; 
    if (msg.attachments.length) { 

     // Message with attachment, proceed to download it. 
     // Skype & MS Teams attachment URLs are secured by a JwtToken, so we need to pass the token from our bot. 
     var attachment = msg.attachments[0]; 
     var fileDownload = checkRequiresToken(msg) ? requestWithToken(attachment.contentUrl) : request(attachment.contentUrl); 

     fileDownload.then(
      function (response) { 
       var base64String = new Buffer(response, 'binary').toString('base64'); 

       var echoImage = new builder.Message(session).text('You sent:').addAttachment({ 
         contentType: attachment.contentType, 
         contentUrl: 'data:' + attachment.contentType + ';base64,' + base64String, 
         name: 'Uploaded Image' 
        }); 
       session.send(echoImage); 

      }).catch(function (err) { 
       console.log('Error downloading attachment:', { statusCode: err.statusCode, message: err.response.statusMessage }); 
      }); 
    } else { 
     // No attachments were sent 
     var reply = new builder.Message(session) 
      .text('Hi there! This sample is intented to show how can I receive attachments but no attachment was sent to me. Please try again sending a new message with an attachment.'); 
     session.send(reply); 
    } 
}); 

// Request file with Authentication Header 
var requestWithToken = function (url) { 
    return obtainToken().then(function (token) { 
     return request({ 
      url: url, 
      headers: { 
       'Authorization': 'Bearer ' + token, 
       'Content-Type': 'application/octet-stream' 
      } 
     }); 
    }); 
}; 

// Promise for obtaining JWT Token (requested once) 
var obtainToken = Promise.promisify(connector.getAccessToken.bind(connector)); 

var checkRequiresToken = function (message) { 
    return message.source === 'skype' || message.source === 'msteams'; 
}; 

これを実証プロジェクト全体がここで見つけることができます:https://github.com/nwhitmont/botframework-node-v3-receive-attachment

+0

おかげエリックのためにあなたの貴重な返事。上記のコードでは、checkRequiresToken、requestWithTokenはどこからリクエストされているのですか?これらのエラーは次のようになります。ReferenceError:checkRequiresTokenは定義されていません。これに関する情報を提供してください。 –

+0

@MuraliEdiga checkRequiresTokenと他のメソッドを答えに追加しました。(提供されているgithubのリンクにもあります) –

+0

ありがとう@Eric Dahlvangファイルからバイナリ(base64)を変換できます。 –

関連する問題