В онлайн-приложении Mapillary я могу загрузить несколько изображений в учетную запись и опубликовать sh их в учетной записи. Теперь я хочу сделать все это из приложения Windows Forms. Я нашел проект на их github, объясняющий часть процесса загрузки, добавляющий заголовки в веб-запрос. После этого вызов не даст желаемого результата. Мне было интересно, если кто-нибудь здесь имеет опыт работы с Mapillary и C# и знает решение моей проблемы. Изображения, которые я отправляю по запросу, содержат информацию GPS, но Mapillary может потребоваться дополнительная информация в тегах изображений. Однако я не могу найти больше информации в Mapillary GitHub. Также после загрузки мне может потребоваться предпринять шаги для полной публикации sh изображений в учетной записи.
Мой текущий код:
private async Task UploadAsync(Photo upload)
{
var fileStream = new FileStream(upload.FilePath, FileMode.Open, FileAccess.Read);
MemoryStream stream = new MemoryStream();
await fileStream.CopyToAsync(stream);
stream.Position = 0;
var fileName = upload.FilePath.Substring(upload.FilePath.LastIndexOf("\\"));
var streamContent = new StreamContent(stream);
upload.UploadInfo.IsUploading = true;
upload.UploadInfo.PercentageDone = 0;
var httpContent = new MultipartFormDataContent
{
{ new StringContent(fileName), "key" },
{ new StringContent(_awsAccessKey), "AWSAccessKeyId" },
{ new StringContent("private"), "acl" },
{ new StringContent(_policy), "policy" },
{ new StringContent(_signature), "signature" },
{ new StringContent("image/jpeg"), "Content-Type" },
{ streamContent, "file", fileName }
};
HttpStatusCode statusCode;
try
{
using (var httpClient = new HttpClient())
{
httpClient.Timeout = TimeSpan.FromSeconds(240);
HttpResponseMessage response = await httpClient.PostAsync(_uploadUri, httpContent);
statusCode = response.StatusCode;
}
}
catch (Exception ex)
{
_numFailed++;
Log(_numFailed + " Upload error: " + ex.Message, true);
statusCode = HttpStatusCode.InternalServerError;
upload.UploadInfo.Failed = true;
}
countUploaded++;
UpdateTotalStatus();
if (statusCode == HttpStatusCode.NoContent)
{
upload.UploadInfo.IsUploaded = true;
upload.UploadInfo.IsUploading = false;
upload.UploadInfo.PercentageDone = 100;
RemoveUpload(upload.UploadInfo.Path);
}
else if (statusCode == HttpStatusCode.Unauthorized)
{
_numFailed++;
SetFailed(upload, statusCode);
upload.UploadInfo.Failed = true;
}
else
{
_numFailed++;
SetFailed(upload, statusCode);
upload.UploadInfo.Failed = true;
}
}
Ключи, которые я получил в основном из проверки загружать звонки в приложении Mapillary. AWSAccesKey - это ключ для доступа к корзине в amazone AWS.
Политика - это ключ доступа, который я получил от mapillary для использования API.
Подпись - это еще один уникальный идентификатор, который одинаков при каждой загрузке.