我有一个字符串想要通过电报机器人发送,但不是作为消息(它相当长)而是作为文件发送。但是,我在创建此文件并将其上传到 Telegram 时遇到一些问题(因为我需要使用 API 文档https://core.telegram.org/bots/api#sending-files中指定的 multipart/form-data 来发布文件)。受/sf/answers/1600124011/的启发,我尝试了以下方法:
var file = new Blob([enc_data], {type: 'text/plain'});
var formData = new FormData();
formData.append('chat_id', '<id>');
formData.append('document', file);
var request = new XMLHttpRequest();
request.open('POST', 'https://api.telegram.org/bot<token>/sendDocument');
request.send(FormData);
Run Code Online (Sandbox Code Playgroud)
但我只得到一个一般错误,POST https://api.telegram.org/bot<token>/sendDocument 400 (Bad Request)
我从未使用过 XMLHttpRequest,所以我可能搞乱了它的用法,但我找不到任何解决方案。欢迎使用替代方案(可能使用纯 js)。
在下面的代码(我的源代码的简化版本)中,在声明时lv初始化为1右的变量,getline在for循环内部调用时神秘地变为0 .printf如果您输入任何内容"cl",或者通过gdb,您可能会注意到它.变量在getline调用后立即更改值.最奇怪的是,当"cl"提示输入时,你可以通过gdb看到之后lv转向的值,然后在语句中正确设置,然后保存用于后续循环,无论你输入什么.0getline3if
此外,如果您将声明更改为static int lv = 1;然后预期的行为会出现(lv保持到1"手动"更改).
有人可以告诉我到底是怎么回事?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ( void ) {
char* line=NULL;
int len;
int lv = 1;
for(;;) {
printf("Level: %d\n", lv);
getline(&line, (size_t*)&len, stdin);
if (line[strlen(line) - 1] == '\n') {
line[strlen(line) - 1] = '\0';
}
if (strcmp(line, "cl")==0) …Run Code Online (Sandbox Code Playgroud) c ×1
for-loop ×1
getline ×1
javascript ×1
post ×1
static ×1
telegram ×1
telegram-bot ×1
variables ×1