Загрузить изображение в Mapillary из приложения Windows - PullRequest
0 голосов
/ 17 марта 2020

В онлайн-приложении 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.
Подпись - это еще один уникальный идентификатор, который одинаков при каждой загрузке.

...