我想通过javascript(不是Node.js)将图像发送到电报机器人。为此,我需要机器人的令牌和我的电报用户ID。
发送短信效果很好,我也成功发送了我作为LINK提供的照片。现在,我想拍摄自己的照片,并将其直接发送到我的机器人。
这是电报文档的一部分:
据我了解,我还可以使用发布请求将图像作为文件而不是作为链接发送。不幸的是,我在实现上没有取得成功:
let token = "xy",
chat_id = "123"
let url = `https://api.telegram.org/bot${token}/sendPhoto?chat_id=${chat_id}`;
$("form").submit(function(e) {
let formData = new FormData(this);
e.preventDefault();
$.ajax({
url: url,
type: 'POST',
data: formData,
success: function(r) {
console.log(r);
},
error: (e) => {
console.log("Error", e)
}
return false;
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
<input id="fileInput" type="file" />
<input type="submit" value="submit" />
</form>
我该如何在纯JavaScript中实现并正常工作?
请注意,https://api.telegram.org/bot${token}/sendPhoto?chat_id=${chat_id}&photo=${link_to_photo}
在工作。
答案 0 :(得分:0)
尽管从jQuery documentation并不明显,但您需要再设置两个ajax
选项:
processData: false
processData (默认值:true)
类型:布尔值默认情况下,将处理作为对象传递给data选项的数据(从技术上讲,不是字符串) 并转换为适合默认值的查询字符串 内容类型为“应用程序/ x-www-form-urlencoded”。如果你想发送 DOMDocument或其他未处理的数据,请将此选项设置为false。
FormData应该未经处理发送
contentType: false
contentType (默认:“ application / x-www-form-urlencoded; charset = UTF-8”)
类型:布尔值或字符串将数据发送到服务器时,请使用此内容类型。默认值为“ application / x-www-form-urlencoded; charset = UTF-8“,在大多数情况下都可以。如果您明确通过 在$ .ajax()的内容类型中,则始终将其发送到服务器 (即使没有数据发送)。从jQuery 1.6开始,您可以传递false来告知 jQuery不设置任何内容类型标头。注意:W3C XMLHttpRequest规范规定字符集始终是 UTF-8;指定另一个字符集不会强制浏览器进行更改 编码。注意:对于跨域请求,请设置内容 键入除application / x-www-form-urlencoded以外的任何内容, multipart / form-data或text / plain将触发浏览器发送 向服务器发送预检OPTIONS请求。
$.ajax({
url: url,
type: 'POST',
data: formData,
processData: false, // TO SEND DATA UNPROCESSED
contentType: false, // TO OVERRIDE THE DEFAULT
success: function(r) {console.log(r);},
error: (e) => {console.log("Error", e)}
// return false; <-- REMOVE THIS FROM HERE
});