Загрузить документ(голосовое сообщение) для отправки в сообщения из массива байт. · 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());
}

}