我想通过电报发送一份文件,我写了代码:
function send(file) {
var formData = new FormData();
formData.append('file', file, "2.txt");
var xhr = new XMLHttpRequest();
xhr.open('POST', 'https://api.telegram.org/bot' + token + '/sendDocument?chat_id=' + id, true);
xhr.send(formData);
}
var blob = new Blob(['hello'], {type: 'plain/text'});
console.log(blob)
blob.lastModifiedDate = new Date();
blob.name = '2.txt';
send(blob);
电报回复:
{"ok":false,"error_code":400,"description":"[Error]: Bad Request: there is no document in request"}
Telegram 期望文件所在的参数名为
document
,而不是 file
。
function send(file) {
var formData = new FormData();
formData.append('document', file, '2.txt');
// the rest of your code
}
const inputFile = document.querySelector('#subir_archivosss');
const image = document.querySelector('#previa');
/**
* Returns a file in Base64URL format.
* @param {File} file
* @return {Promise<string>}
*/
async function encodeFileAsBase64URL(file) {
return new Promise((resolve) => {
const reader = new FileReader();
reader.addEventListener('loadend', () => {
resolve(reader.result);
});
reader.readAsDataURL(file);
});
};
inputFile.addEventListener('input', async (event) => {
// Convierto la primera imagen del input en una ruta Base64
const base64URL = await encodeFileAsBase64URL(inputFile.files[0]);
var datoss=base64URL.split(',');
/*
// split para quitar el encabezado antes de la ','
datoss[0]= "data:image/png;base,";
datoss[1]= "codigo base 64";
*/
const bufferData = base64ToBlob([datoss[1]],'image/png');
const formData = new FormData();
formData.append('photo', bufferData );
formData.append('caption', "asdfasdf" );
$.ajax({
url: "https://api.telegram.org/bot"+v_botToken+"/sendphoto?chat_id="+ideChat,
type: "POST",
processData: false,
contentType: false,
data: formData,
success: function () {
// Handle success
}
});
});
function base64ToBlob(base64String, contentType = '' ) {
const byteCharacters = atob(base64String);
const byteArrays = [];
for (let i = 0; i < byteCharacters.length; i++) {
byteArrays.push(byteCharacters.charCodeAt(i));
}
const byteArray = new Uint8Array(byteArrays);
var blobb= new Blob([byteArray], { type: contentType });
return blobb;
}