Загрузите вложение, используя HpAlm rest api - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть приложение, которое выполняет синхронизацию между двумя API: JAZZ RT C и HPALM.

Теперь я могу синхронизировать файлы из RT C в HPALM, только если я сохраню их временно на диск, как показано ниже:

Rtc.getAttachment(itemId)
.then(data => {  // <--- data is array of bytes
    fs.writeFileSync(
        path.join(__dirname, 'tmp_attachments', filename),
        data
    );
    let file = fs.createReadStream(__dirname, 'tmp_attachments', filename);
    const formData = {
        bin: file
    };
    let uploadOptions = {
        headers: {
            Accept: 'application/json',
        },
        url: 'blablabla,
        formData: formData
    };
    request.post(uploadOptions, function (error, response, body) {
        if (error) throw error;
        else console.log(body);
    });
});

Приведенный выше код работает отлично, но теперь я хотел бы напрямую отправлять полученные байты без необходимости сохранять их в виде файла. Я попытался:

Rtc.getAttachment(itemId)
.then(data => {  // <--- data is array of bytes
    const formData = {
        bin: data,
        name: 'myFile.xlsx'
    };
    let uploadOptions = {
        headers: {
            Accept: 'application/json',
            'Content-Type': 'multipart/form-data; boundary=---------328649490520098662907564',
            'Content-Length': data.byteLength
        },
        url: 'blablabla,
        formData: formData
    };
    request.post(uploadOptions, function (error, response, body) {
        if (error) throw error;
        else console.log(body);
    });
});

Приведенный выше код всегда дает сбой с ответом: {"error":"Invalid POST request"}

Итак, мои вопросы:

1. Что такое разница между массивом байтов и fs.createReadStream («файл, содержащий массив байтов»)?

2. Я также заметил, что data.byteLength отличается от content-length (непосредственно устанавливается запросом) первого кода блока. Почему?

3. Как правильно отправить массив байтов в виде файла?

Большое вам спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...