vk-io icon indicating copy to clipboard operation
vk-io copied to clipboard

Загрузка файлов zip/rar

Open YaponchikLIN opened this issue 3 years ago • 2 comments

Что делал?

С помощью метода messageDocument отправлял файл с указанием свойства filename, у которого расширение было zip.

Чего вы ожидали, что это произойдет?

Думал что файл сохранится в формате zip и его можно будет скачать с помощью полученной ссылки с таким же расширением

Каков был фактический результат?

В итоге выдало ошибку "Code №100 - One of the parameters specified was missing or invalid: file is undefined". Узнавал информацию об этом в группе в телеграме, написали что это нормально, что javascript и VK не дают это сделать

Дополнительная информация

Код с ошибкой был следующий: https://disk.yandex.ru/i/-MJLvzqKlg5hXA

Решил попробовать сделать через ванильный api, посмотреть что мне напишет в ответе. Получил ссылку для загрузки документа с помощью docs.getMessagesUploadServer. Далее воспользовался этой ссылкой и по средствам Postman отправил файл c форматом formdata. Получил ответ: "file": "306837041|0|-1|235131|7ef0b62784|zip|26091|formdata-proxy-master.zip|......" Потом с помощью метода docs.save попытался сохранить. В итоге получилось, мне выдало ссылку для скачивания файла и он скачался в нужном расширении zip. Как следствие в методах от ванильного api загрузка файлов с раширением zip/rar работает, а в vk-io выводит ошибку. Может что-то неправильно делал, если так, то буду рад увидеть как нужно было делать.

Версии

package version
vk-io 4.6.0
node 18.2.0
TypeScript 4.7.2
yarn or npm 8.9.0
Загрузка zip.txt

YaponchikLIN avatar Jun 03 '22 12:06 YaponchikLIN

В представленном коде только последний чанк будет передан в библиотеку, а это битый файл.

app.use('/api', function(req, res, next) {
-   let fileBuffer: Buffer;
-   let data: any;
+   let chunks: Buffer[];
+   let totalSize = 0;
    req.setEncoding('binary');
-   req.on('data', function(sctream: any) {
+   req.on('data', function(chunk) {
-       data = stream;
+       chunks.push(chunk);
+       totalSize += chunk.length;
    });
    req.on('end', async function() {
-       fileBuffer = Buffer.from(data);
+       const fileBuffer = Buffer.chunk(chunks, totalSize);
        const api = new API({
            token: String(req.query.access_token)
        });
        const upload = new Upload({
            api
        });
        const attachment = await upload.messageDocument({
            peer_id: Number(req.query.peer_id),
            title: 'OLicenseCleanup.zip',
            source: {
                value: fileBuffer,
                filename: 'OLicenseCleanup.zip',
            }
        });
        console.log(attachment);
        next();
        //}
    });
});

negezor avatar Jun 03 '22 23:06 negezor

Спасибо за ответ, но ошибка так и осталась, буду смотреть дальше 04.06.2022, 02:21, "Vladlen" @.***>: В представленном коде только последний чанк будет передан в библиотеку, а это битый файл.app.use('/api', function(req, res, next) {

  •   let fileBuffer: Buffer;
  •   let data: any;
  •   let chunks: Buffer[];
  •   let totalSize = 0;    req.setEncoding('binary');
  •   req.on('data', function(sctream: any) {
  •   req.on('data', function(chunk) {
  •       data = stream;
  •       chunks.push(chunk);
  •       totalSize += chunk.length;    });    req.on('end', async function() {
  •       fileBuffer = Buffer.from(data);
  •       const fileBuffer = Buffer.chunk(chunks, totalSize);        const api = new API({            token: String(req.query.access_token)        });        const upload = new Upload({            api        });        const attachment = await upload.messageDocument({            peer_id: Number(req.query.peer_id),            title: 'OLicenseCleanup.zip',            source: {                value: fileBuffer,                filename: 'OLicenseCleanup.zip',            }        });        console.log(attachment);        next();        //}    }); });—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you authored the thread.Message ID: @.***>

YaponchikLIN avatar Jun 04 '22 13:06 YaponchikLIN