vk-io
vk-io copied to clipboard
Загрузка файлов zip/rar
Что делал?
С помощью метода 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 |
В представленном коде только последний чанк будет передан в библиотеку, а это битый файл.
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();
//}
});
});
Спасибо за ответ, но ошибка так и осталась, буду смотреть дальше 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: @.***>