如何发送文件?

时间:2018-12-02 00:20:55

标签: javascript jquery file upload telegram

我想通过javascript(不是Node.js)将图像发送到电报机器人。为此,我需要机器人的令牌和我的电报用户ID。

发送短信效果很好,我也成功发送了我作为LINK提供的照片。现在,我想拍摄自己的照片,并将其直接发送到我的机器人。

这是电报文档的一部分:

enter image description here

据我了解,我还可以使用发布请求将图像作为文件而不是作为链接发送。不幸的是,我在实现上没有取得成功:

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}在工作。

1 个答案:

答案 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
});