Closed petr-ananev closed 4 years ago
Похоже для поста на стену следовало использовать GetWallUploadServer + SaveWallPhoto. Но в итоге получаю ошибку "VkNet.Exception.InvalidHashException: 'Invalid hash'"
public async void Post(VkApi api, string message, string imagePath)
{
var uploadServer = api.Photo.GetWallUploadServer(AplicationParams.GroupId);
var response = await UploadFile(uploadServer.UploadUrl, "https://sun9-64.userapi.com/c857336/v857336326/6434d/dUJywMrNS1c.jpg", "jpg");
var photo = api.Photo.SaveWallPhoto(response, (ulong?)api.UserId.Value)[0];
var post = api.Wall.Post(new WallPostParams {
OwnerId = AplicationParams.OwnerId,
Message = message,
Attachments = new List<MediaAttachment>() { photo }
});
}
private async Task<string> UploadFile(string serverUrl, string file, string fileExtension)
{
// Получение массива байтов из файла
var data = GetBytes(file);
// Создание запроса на загрузку файла на сервер
using (var client = new HttpClient())
{
var requestContent = new MultipartFormDataContent();
var content = new ByteArrayContent(data);
content.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data");
requestContent.Add(content, "file", $"file.{fileExtension}");
var response = client.PostAsync(serverUrl, requestContent).Result;
return Encoding.Default.GetString(await response.Content.ReadAsByteArrayAsync());
}
}
private byte[] GetBytes(string fileUrl)
{
using (var webClient = new WebClient())
{
return webClient.DownloadData(fileUrl);
}
}
Заработало. Добавил GroupId var photo = api.Photo.SaveWallPhoto(response, (ulong?)api.UserId.Value, (ulong?)AplicationParams.GroupId)[0];
Пользовался гайдом https://github.com/vknet/vk/wiki/FAQ
Первая проблема что метод Api.Docs.Save падал с "Object reference not set to an instance of an object". Попробовал обойти эту проблему переопределив MediaAttachment и использовав Api.Photo.SaveMessagesPhoto для получения всех необходимых свойств MediaAttachment. В посте присутствует только текст сообщения.
Из за чего может падать Api.Docs.Save