UploadFile#
Для метода UploadFile рекомендуется использовать хост mediaUrl из личного кабинета
Метод предназначен для загрузки файла в облачное хранилище, который можно отправить методом sendFileByUrl. А так же позволяет избежать ошибок получения файлов из внешних хранилищ и ускорить отправку сообщений, например, в сценарии рассылки.
Альтернативный способ отправить файл загрузкой с диска: sendFileByUpload.
Рекомендуется применять метод при рассылках однотипных сообщений:
- Методом UploadFile загрузите требуемый файл в хранилище GREEN-API, в ответе получите ссылку на файл.
- Методом SendFileByUrl производите отправку используя полученную ссылку.
Срок жизни ссылки 15 дней.
Максимальный размер отправляемых файлов равен 100 Мбайт.
Тип отправляемого файла и способ его отправки определяется по расширению файла.
Для метода используются ограничения на частоту запросов в секунду.
Запрос#
Для выгрузки файла требуется выполнить запрос по адресу:
{{mediaUrl}}/v3/waInstance{{idInstance}}/uploadFile/{{apiTokenInstance}}
Для получения параметров запроса mediaUrl
, idInstance
и apiTokenInstance
обратитесь к разделу Перед началом работы.
Параметры заголовка#
Параметр | Обязательный | Описание |
---|---|---|
Content-Type | Да | Тип файла в соответствии со списком MIME-типов . (Если тип файла отсутствует в списке, то вместо данной строки передаётся GA-Filename ) |
GA-Filename | Нет | Имя файла с расширением, если файл отсутствует в списке MIME-типов. Например, файлы как .go или .py . (Если тип файла соответствует списку, строка не передаётся, используется только Content-Type ) |
Если система не сможет определить тип файла, то произойдет отправка с типом по умолчанию (бинарный файл):
.bin
Параметры запроса#
Параметр | Тип | Обязательный | Описание |
---|---|---|---|
file | binary | Да | Выгружаемый файл |
Пример тела запроса#
В качестве тела запроса необходимо указать сам файл
Ответ#
Поля ответа#
Поле | Тип | Описание |
---|---|---|
urlFile | string | Ссылка на выгруженный файл (срок действия ссылки 15 дней) |
Пример тела ответа#
Успешное выполнение метода#
{
"urlFile": "https://sw-media-out.storage.yandexcloud.net/3100000001/95917013-579d-429f-9145-469865c4a6e8.jpg"
}
Выполнение метода с ошибкой#
status code 400
{
"file should not be empty"
}
Ошибки uploadFile#
Перечень общих для всех методов ошибок смотрите в разделе Стандартные ошибки
Код HTTP | Идентификатор ошибки | Описание |
---|---|---|
400 | file should not be empty | Пользователь отправил пустой файл. Загружаемый файл не должен быть пустым. |
413 | request entity too large | Превышение допустимого размера файла (~99.9mb) Возникает при отправке файлов в обработке 1С (версия 8.3.22.1923). Возможное решение: Сменить версию 1С. |
500 | Internal Server Error | Неверно указан метод запроса. Измените метод на POST и повторите запрос |
Примеры кода#
Примеры кода uploadFile#
import requests
url = "{{mediaUrl}}/v3/waInstance{{idInstance}}/uploadFile/{{apiTokenInstance}}"
files = [
('file', ('window.jpg', open('C:/window.jpg','rb'),'image/jpeg'))
]
headers = {
'Content-Type': 'image/jpeg'
}
response = requests.post(url, files=files, headers=headers)
print(response.text.encode('utf8'))
curl --location '{{mediaUrl}}/v3/{{idInstance}}/uploadFile/{{apiTokenInstance}}' \
--header 'Content-Type: image/jpeg' \
--data '@test.jpg'
var file = new File("/Users/user/Desktop/fileExample.jpeg");
var restTemplate = new RestTemplate();
var requestUrl = new StringBuilder();
requestUrl
.append({{mediaUrl}})
.append("/v3/waInstance").append({{idInstance}})
.append("/uploadFile/")
.append({{apiTokenInstance}});
var byteArrayResource = new ByteArrayResource(Files.readAllBytes(file.toPath()));
var headers = new HttpHeaders();
headers.setContentType(MediaTypeFactory.getMediaType(file.getName())
.orElse(MediaType.APPLICATION_OCTET_STREAM));
var requestEntity = new HttpEntity<>(byteArrayResource, headers);
var response = restTemplate.exchange(requestUrl.toString(), HttpMethod.POST, requestEntity, String.class);
System.out.println(response);
var file = new File("/Users/user/Desktop/fileExample.jpeg");
var requestUrl = new StringBuilder();
requestUrl
.append({{mediaUrl}})
.append("/v3/waInstance").append({{idInstance}})
.append("/uploadFile/")
.append({{apiTokenInstance}});
var response = Unirest.post(requestUrl.toString())
.header("Content-Type", Files.probeContentType(file.toPath()))
.body(Files.readAllBytes(file.toPath()))
.asString();
System.out.println(response);