Закрыть
npm

Загрузчик файлов Редактировано: 28.08.2020 в 04:45

{...} Для включения или отключения используйте utils.uploader

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>) - параметры, которые отправятся вместе с файлом в запросе

Посмотрите боевой пример использования загрузчика файлов

[+] (Спойлер) - Боевой пример использования загрузчика (uploadFile)

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>) - параметры, которые отправятся вместе с файлом в запросе

Посмотрите боевой пример использования загрузчика файлов с данным способом

[+] (Спойлер) - Боевой пример использования загрузчика (uploadFetchedFile)

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
      ...
    })