如何从bot模拟器上传文件(.pdf,.jpg..jpeg)并转换为二进制文件(base64)而不保存文件到本地驱动器?

SDK平台:Node.js

如何从bot模拟器上传文件(.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

下面是一个下载文件的例子,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'; }; 

一个完整的项目可以在这里find: https : //github.com/nwhitmont/botframework-node-v3-receive-attachment