Загрузчик файлов Редактировано: 28.08.2020 в 04:45
easyvk({
utils: {
uploader: true
}
})
This util not connected. Make params.utils[uploader] = true
Загрузчик файлов может понадобиться в те моменты, когда нужно загрузить какой-то файл на сервер. К счастью, в Easy VK такой инструмент есть и я его постоянно использую во многих проектах
uploader.getUploadURL()
Метод позволяет быстро получить URL адрес сервера для загрузки файла
Аргументы
- methodName * (<string>) - метод, обращаясь к которому, мы хотим получить URL адрес для загрузки файла, например, photos.getWallUploadServer
- params (<Object>) - параметры запроса, эти параметры будут высланы вместе с запросом получения URL
- returnAll (<boolean> ) - нужно ли возвращать весь ответ, или только url адрес
Метод в ответе вернет строку - адрес для загрузки файла.
В случае, если указана опция returnAll
, то вернется следующий объект
{
url: UPLOAD_URL,
vkr: VKResponse // если выбран 3 аргумент
}
const method = 'photos.getWallUploadServer'
vk.uploader.getUploadURL(method, {
group_id: '153044419'
}).then((url) => {
console.log(url);
});
uploader.uploadFile()
Метод загружает указанный файл на указанный URL адрес сервера, используйте его в связке с методом uploader.getUploadURL() для большего удобства
Аргументы
- url * (<string>) - URL адрес сервера, на него будет отправлен файл
-
filePath * (<string>, fs.readStream) - Путь к файлу или объект
fs.readStream
, который нужно загрузить -
fieldName (<string>) ["file"] - название поля, в котором отправится файл, проще говоря - это то, как для сервера будет называться файл, например (php)
$_FILES['photo']
и т.д Как называть данный параметр, уточняйте в документации API ВКонтакте - params (<Object>) - параметры, которые отправятся вместе с файлом в запросе
Посмотрите боевой пример использования загрузчика файлов
const path = require('path')
const easyvk = require('easyvk')
let vk = null;
easyvk(/*параметры для авторизации*/).then(_vk => {
vk = _vk;
// Получаем URL для загрузки
return vk.uploader.getUploadURL(
'photos.getMessagesUploadServer', {}, true
)
}).then(async ({url, vkr}) => {
const field = 'photo'
const server = vk.uploader
const me = 356607530
const filePath = path.join(__dirname, 'photo.png')
url = url.upload_url
// Загружаем файл тут
let fileData = await server.uploadFile(url, filePath, field, {})
//Сохраняем фотографию, чтобы дальше ее прикреплять к сообщениям или куда-то еще
fileData = await vk.post('photos.saveMessagesPhoto', fileData)
fileData = fileData[0]
// Прикрепляем к сообщению сохраненную фотку
const attachments = [
`photo${fileData.owner_id}_${fileData.id}_${fileData.access_key}`
]
// Отправляем себе фотку
return vk.call('messages.send', {
user_id: me,
attachment: attachments,
message: 'Hello! Отправляю тебе мою фотку. Как тебе?',
random_id: easyvk.randomId()
});
})
uploader.uploadFetchedFile()
Метод загружает указанный файл с удаленного сервера (сайта) на указанный URL адрес сервера ВК, используйте его в связке с методом uploader.getUploadURL() для большего удобства
Аргументы
- url * (<string>) - URL адрес сервера, на него будет отправлен файл
- fileUrl * (<string>) - URL адрес изображния, которое надо загрузить на сервер ВКонтакте. Файл будет скачан в оперативную память и не сохранится на диске!
-
fieldName (<string>) ["file"] - название поля, в котором отправится файл, проще говоря - это то, как для сервера будет называться файл, например (php)
$_FILES['photo']
и т.д Как называть данный параметр, уточняйте в документации API ВКонтакте - params (<Object>) - параметры, которые отправятся вместе с файлом в запросе
Посмотрите боевой пример использования загрузчика файлов с данным способом
const path = require('path')
const easyvk = require('easyvk')
let vk = null;
easyvk(/*параметры для авторизации*/).then(_vk => {
vk = _vk;
// Получаем URL для загрузки
return vk.uploader.getUploadURL(
'photos.getMessagesUploadServer', {}, true
)
}).then(async ({url, vkr}) => {
const field = 'photo'
const server = vk.uploader
const me = 356607530
const fileUrl = 'https://vk.com/images/camera_400.png'
url = url.upload_url
// Загружаем файл тут
let fileData = await server.uploadFetchedFile(url, fileUrl, field, {})
//Сохраняем фотографию, чтобы дальше ее прикреплять к сообщениям или куда-то еще
fileData = await vk.post('photos.saveMessagesPhoto', fileData)
fileData = fileData[0]
// Прикрепляем к сообщению сохраненную фотку
const attachments = [
`photo${fileData.owner_id}_${fileData.id}_${fileData.access_key}`
]
// Отправляем себе фотку
return vk.call('messages.send', {
user_id: me,
attachment: attachments,
message: 'Hello! Отправляю тебе мою фотку. Как тебе?',
random_id: easyvk.randomId()
})
})
uploader.upload()
Универсальный метод для загрузки файла. Упрощает загрузку до одного метода, но немного усложняет понимание работы. На основе этого методы Вы можете писать в своем коде загрузчики-обертки, чтобы, например, загружать только аудиосообщения, или только фотографии, или фотографии в публичный альбом и т.д.
Метод принимает один объект с настройками, о них речь ниже
-
getUrlMethod *(<string>)
Метод, к которому надо обратиться, чтобы получить URL адрес сервера для загрузки, такой как
photos.getMarketAlbumUploadServer
и другие -
getUrlParams (<Object>)
Параметры, которые отправятся вместе с запросом на получение URL адреса сервера
vk.uploader.upload({ getUrlMethod: "photos.getMarketAlbumUploadServer", getUrlParams: { group_id: 1 }, ... })
-
saveMethod *(<string>)
Метод, с помощью которого загруженный файл нужно сохранить, такой, как например
photos.saveMarketAlbumPhoto
vk.uploader.upload({ getUrlMethod: "photos.getMarketAlbumUploadServer", getUrlParams: { group_id: 1 }, saveMethod: "photos.saveMarketAlbumPhoto", ... })
-
saveParams (<Object>)
Параметры, которые отправятся вместе с запросом на сохранение файла
vk.uploader.upload({ getUrlMethod: "photos.getMarketAlbumUploadServer", getUrlParams: { group_id: 1 }, saveMethod: "photos.saveMarketAlbumPhoto", saveParams: { group_id: 1, // server, hash подставятся автоматически } ... })
-
file *(<Object>)
Путь к файлу, который надо загрузить (URL, или файл на диске)
vk.uploader.upload({ getUrlMethod: "photos.getMarketAlbumUploadServer", getUrlParams: { group_id: 1 }, saveMethod: "photos.saveMarketAlbumPhoto", saveParams: { group_id: 1, // server, hash подставятся автоматически }, file: './file.png' ... })
-
isWeb (<boolean>)
Если указать эту опцию, как true, то загрузчик попробует сначала скачать файл с указанного URL. Указывайте эту опцию только, если файл не находится на жестком диске, а, например, где-то на другом сервере
vk.uploader.upload({ getUrlMethod: "photos.getMarketAlbumUploadServer", getUrlParams: { group_id: 1 }, saveMethod: "photos.saveMarketAlbumPhoto", saveParams: { group_id: 1, // server, hash подставятся автоматически }, file: 'https://vk.com/images/community_50.png', isWeb: true ... })