Javascript 如何使用AWS Lambda通过电报机器人发送文件?
我正在尝试使用电报机器人发送mp3文件 当我使用终端中的节点在本地运行它时,这段代码运行得非常好:Javascript 如何使用AWS Lambda通过电报机器人发送文件?,javascript,node.js,amazon-web-services,aws-lambda,telegram,Javascript,Node.js,Amazon Web Services,Aws Lambda,Telegram,我正在尝试使用电报机器人发送mp3文件 当我使用终端中的节点在本地运行它时,这段代码运行得非常好: 'use strict' const Telegraf = require('telegraf') const bot = new Telegraf('Token') bot.command('audio', (ctx) => { ctx.replyWithAudio({source: './media/song.mp3'}) }) const { PORT =
'use strict'
const Telegraf = require('telegraf')
const bot = new Telegraf('Token')
bot.command('audio', (ctx) => {
ctx.replyWithAudio({source: './media/song.mp3'})
})
const { PORT = 3000 } = process.env
bot.startWebhook('/', null, PORT)
但是,当我将其部署为AWS Lambda函数时,会出现以下错误:
Apr 29th 12:24:12pm ERRO staging 4 events.js:183
Apr 29th 12:24:12pm ERRO staging 4 throw er; // Unhandled 'error' event
Apr 29th 12:24:12pm ERRO staging 4 ^
Apr 29th 12:24:12pm ERRO staging 4
Apr 29th 12:24:12pm ERRO staging 4 Error: write after end
Apr 29th 12:24:12pm ERRO staging 4 at write_ (_http_outgoing.js:622:15)
Apr 29th 12:24:12pm ERRO staging 4 at ServerResponse.write (_http_outgoing.js:617:10)
Apr 29th 12:24:12pm ERRO staging 4 at MultipartStream.ondata (_stream_readable.js:639:20)
Apr 29th 12:24:12pm ERRO staging 4 at emitOne (events.js:116:13)
Apr 29th 12:24:12pm ERRO staging 4 at MultipartStream.emit (events.js:211:7)
Apr 29th 12:24:12pm ERRO staging 4 at MultipartStream.Readable.read (_stream_readable.js:475:10)
Apr 29th 12:24:12pm ERRO staging 4 at flow (_stream_readable.js:846:34)
Apr 29th 12:24:12pm ERRO staging 4 at resume_ (_stream_readable.js:828:3)
Apr 29th 12:24:12pm ERRO staging 4 at _combinedTickCallback (internal/process/next_tick.js:138:11)
Apr 29th 12:24:12pm ERRO staging 4 at process._tickCallback (internal/process/next_tick.js:180:9)
我很确定这是因为我不明白在部署lambda函数时文件是如何存储的。如何保存目录以便我检索它们?这可能吗
我的zip包包含以下目录:
对于这个bot,我用来部署和编写代码 如果你的MP3在你上传的zip包中,那么当lambda运行时,你可以在包中找到它和其他任何东西 在lambda中,您可以通过
process.env.lambda\u TASK\u ROOT
获得包含解压包的目录。您的文件将与该文件相关
bot.command('audio', (ctx) => {
ctx.replyWithAudio({
source: process.env.LAMBDA_TASK_ROOT + '/media/song.mp3'
})
})
请把剩下的代码贴出来。Lambda有512MB可供使用,使用
/tmp
。很难说你想做什么,MP3在压缩包里吗?@dpwrussell我添加了你要的信息。我不明白你告诉我如何获取zip包,而是我使用的,它给了我zip文件。对不起,出于某种原因,我用Python而不是javascript编写了它。我不是说您应该以不同的方式构建捆绑包,而是说明如何在lambda运行时获取捆绑包中的文件。我更新了答案。