javascript - 使用电报机器人上传文件 - NodeJS
问题描述
我想.txt
用我的 javascript 机器人将文件上传到电报。看过几个php和python的例子但是没看懂,所以只需要一个js例子就知道了。
我应该先上传文件然后再sendDocmuent
输入还是应该输入sendDocmuent
?
我试过但没有sendDocument
用。document: 'file.txt'
还阅读了有关表单数据的信息,但一无所获!
call("sendDocument",{
chat_id: owner,
document: 'file.txt' // or /file.txt or full address (C:...)
});
我没有使用任何库,这是我的调用函数:
const botUrl = "https://api.telegram.org/bot" + token + "/";
const request = require('request');
function call(method, params, onResponse)
{
var requestData = params;
var data = {
url: botUrl+method,
json: true,
body: requestData
};
request.post(data, function(error, httpResponse, body){
if (onResponse) {
if(body)
{
onResponse(body.result);
}
}
});
}
解决方案
编辑:这是对我有用的代码。
似乎 Telegram API 从不需要 sendDocument 方法的文件名:
要发送的文件。将 file_id 作为字符串传递以发送存在于 Telegram 服务器上的文件(推荐),将 HTTP URL 作为字符串传递以使 Telegram 从 Internet 获取文件,或使用 multipart/form-data 上传新文件
正如您所猜测的那样,您需要实际发送文件的内容,而不是仅仅发送字符串'file.txt'
,作为多部分/表单数据。在此答案的基础上,您只需要修改对象的form
字段request
:
const request = require('request')
const fs = require('fs')
const token = '752511654:AAGnu88dyi7YsmpZfcaA6XvR26Fy7f2moGo'
const url = 'https://api.telegram.org/bot'+token+'/sendDocument'
const chat_id = "741718736"
let r = request(url, (err, res, body) => {
if(err) console.log(err)
console.log(body)
})
let f = r.form()
f.append('chat_id', chat_id)
f.append('document', fs.createReadStream('file.txt'))
推荐阅读
- c# - 打包对象以传递给方法
- docker - 如何在容器中配置 nginx 以在自定义路径位置访问构建的 vue 应用程序。NGINX 返回 404
- html - 图片在移动设备上根本不显示,但在桌面上可以正常工作
- r - 针对同一常数查找一系列变量的值
- c# - C# DataTable OrderBy 错误排序
- java - GetMax() 方法的递归关系
- google-apps-script - TypeError:无法从未定义中读取属性“值”。(第 2 行,文件“代码”)
- selenium - 在 DigitalOcean 中运行无头 Firefox 或 chrome
- mysql - MySQL - 将字段限制为最多 5 次出现
- google-sheets - countIf 合并单元格