Javascript 将 blob 发送到电报

问题描述 投票:0回答:2

我想通过电报发送一份文件,我写了代码:

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"}
javascript telegram telegram-bot
2个回答
0
投票

Telegram 期望文件所在的参数名为

document
,而不是
file

function send(file) {
  var formData = new FormData();
  formData.append('document', file, '2.txt');

  // the rest of your code
}

0
投票
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;
}
© www.soinside.com 2019 - 2024. All rights reserved.