Как загрузить изображение в LinkedIn для Ugc поста изображения в C # - PullRequest
0 голосов
/ 20 мая 2019

Итак, я следую Документации Linkedin за реализацию Create Share Share на Linkedin.

В документации перечислены три шага:

  1. Зарегистрируйте свое изображение для загрузки.
  2. Загрузите изображение в LinkedIn.
  3. Создайте общий доступ к изображению.

Пока я могу сделать первый шаг, чтобы получить uploadUrl , я получаю сообщение об ошибке 400 с пустым сообщением об ошибке при выполнении шага 2.

В документации указан второй шаг:

curl -i --upload-file /Users/peter/Desktop/superneatimage.png --header "Authorization: Bearer redacted" 'https://api.linkedin.com/mediaUpload/C5522AQGTYER3k3ByHQ/feedshare-uploadedImage/0?ca=vector_feedshare&cn=uploads&m=AQJbrN86Zm265gAAAWemyz2pxPSgONtBiZdchrgG872QltnfYjnMdb2j3A&app=1953784&sync=0&v=beta&ut=2H-IhpbfXrRow1'

Вот мой шаг 2 в коде C #:

private bool UploadImageBinaryFile(RequestUploadUrlResponse uploadDetails)
    {
        using (HttpClient client = new HttpClient())
        {
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", #access_token#);
            client.DefaultRequestHeaders.Add("X-Restli-Protocol-Version", "2.0.0");
            MultipartFormDataContent form = new MultipartFormDataContent();
            string fileAddress = image_path + "image.png";
            byte[] fileBytes = File.ReadAllBytes(fileAddress);
            string name = "upload-file";
            form.Add(new ByteArrayContent(fileBytes), name);
            HttpResponseMessage response = client.PutAsync
                (
                    uploadDetails.value.uploadMechanism.mediaUploadHttpRequest.uploadUrl,
                    form
            ).Result;

            if (response.IsSuccessStatusCode)//<--getting 400 error Bad Request here
            {
                string responseBody = response.Content.ReadAsStringAsync().Result;
                return true;
            }
            else
            {
                ErrorResponseHandler(response.Content.ReadAsStringAsync().Result);
                return false;
            }
        }
    }

Я гарантировал, что смог успешно загрузить uploadUrl с первого шага.И когда я использовал URL https://api.linkedin.com/v2/assets/#id# для проверки статуса, я смог увидеть статус как WAITING_UPLOAD .

Где я иду не так?

1 Ответ

0 голосов
/ 23 мая 2019

Я нашел решение, в основном мы должны передавать двоичный файл только в содержимом, тогда как я передавал его в форме.

using (HttpClient client = new HttpClient())
{
    try
    {
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accesstoken);
        var content = new ByteArrayContent(File.ReadAllBytes(fileAddress));
        HttpResponseMessage response = client.PutAsync(url, content).Result;
        if (response.IsSuccessStatusCode)
        {
            //response is empty. Have to call the checkAssetStatus to see if the asset is 'AVAILABLE'
            string responseBody = response.Content.ReadAsStringAsync().Result;

        }
        else
        {
            //handleError();
        }
    }
    catch (HttpRequestException ex)
    {
        Console.WriteLine("\nException Caught!");
        Console.WriteLine("Message :{0} ", ex.Message);
    }
}
...