Я хочу отправить локальный файл изображения пользователю через бота в Telegram, но, похоже, не могу понять, как это сделать.
Сайт Telegram заявляет, что для этого я должен использовать multipart / form-data и отправить изображение «обычным способом». После поиска multipart / form-data я сейчас пытаюсь загрузить файл в форму и отправить данные формы в Telegram API.
let form = document.createElement("FORM");
form.setAttribute("action", "https://api.telegram.org/bot{some token}/sendMessage");
form.setAttribute("method", "POST");
form.setAttribute("id", "f");
form.setAttribute("enctype", "multipart/form-data");
let file = document.createElement("input");
file.setAttribute("type", "file");
file.setAttribute("value", "\some\local\path");
file.setAttribute("id", "file");
let text = document.createElement("input");
text.setAttribute("type", "text");
text.setAttribute("name", "text");
text.setAttribute("value", '"test"');
let ID = document.createElement("input");
ID.setAttribute("type", "text");
ID.setAttribute("name", "chat_ID")
ID.setAttribute("value", "123456789");
let s = document.createElement("input");
s.setAttribute("type", "submit");
form.appendChild(text);
form.appendChild(ID);
form.appendChild(s);
form.appendChild(file);
document.getElementsByTagName("body")[0].appendChild(form);
var formJSON = $("form").serializeArray();
console.log(formJSON);
var j = "{"
for (let i = 0; i < formJSON.length; i++) {
j += '"' + (formJSON[i]["name"]) + '"' + ":" + (formJSON[i]["value"]);
if (i != formJSON.length - 1) {
j += ",";
}
}
j += "}";
jP = JSON.parse(String(j));
console.log(document.getElementById("file").files);
form.setAttribute("action", "https://api.telegram.org/bot{some token}/sendPhoto?" + "chat_id=" + (jP["chat_ID"]) + "&photo=" + "\some\local\path");
document.getElementById("f").submit();
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.2/angular.min.js"></script>
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery/jquery-1.6.2.min.js" />
<head>
<meta charset="utf-8" />
<title>This is a test</title>
</head>
<body>
</body>
<script src="formData.js" />
</html>
В настоящее время я не уверен, загружается ли файл, как при запуске HTML-кода в Chrome, файл не выбран, а fileList пуст. Кроме того, Telegram настаивает на том, чтобы данные отправлялись в формате JSON (поэтому я проанализировал данные формы в формате JSON). Я попытался передать локальный путь к файлу, но мне кажется, что я пытаюсь найти идентификатор файла на серверах Telegram. Я не совсем уверен, что делать дальше.