Загрузить документ(голосовое сообщение) для отправки в сообщения из массива байт. · vknet/vk · Discussion #1105 (original) (raw)
Для загрузки из файла можно воспользоваться тем же методом, заранее прочитав все байты документа при помощи File.ReadAllBytes(path)
///
/// Загружает документ на сервер ВК.
///
/// Вк апи.
/// Аттачмент, байты которого будут отправлены на сервер
/// Тип документа - документ или аудиосообщение.
/// Идентификатор назначения
/// Итоговое название документа
/// Аттачмент для отправки вместе с сообщением.
public static async Task LoadDocumentToChatAsync(VkApi vkApi, byte[] data,
DocMessageType docMessageType, long peerId, string filename)
{
var uploadServer = vkApi.Docs.GetMessagesUploadServer(peerId, docMessageType);
var r = await UploadFile(uploadServer.UploadUrl, data);
var documents = vkApi.Docs.Save(r, filename ?? Guid.NewGuid().ToString());
if (documents.Count != 1)
throw new ArgumentException($"Error while loading document attachment to {uploadServer.UploadUrl}");
return documents[0];
}
///
/// Загружает массив байт на указанный url
///
/// Адрес для загрузки
/// Массив данных для загрузки
/// Строка, которую вернул сервер.
public static async Task UploadFile(string url, byte[] data) {
using (var client = new HttpClient()) {
var requestContent = new MultipartFormDataContent();
var documentContent= new ByteArrayContent(data);
documentContent.Headers.ContentType = new MediaTypeHeaderValue("multipart/form-data");
requestContent.Add(documentContent, "file", "audio.webm");
var response = await client.PostAsync(url, requestContent);
return Encoding.ASCII.GetString(await response.Content.ReadAsByteArrayAsync());
}