Создание изображения Linkedin ugcPost работает при публикации с localhost, но не с AWS ECS - PullRequest
0 голосов
/ 08 мая 2020

Я создаю совместное использование изображений в профилях компаний в моем приложении java, следуя приведенным здесь документам ---> https://docs.microsoft.com/en-us/linkedin/consumer/integrations/self-serve/share-on-linkedin#create -an-image-share

Проблема, которую я Я сталкиваюсь с тем, что после успешной загрузки файла (я получаю 201) из контейнера AWS ECS FARGATE, но публикация успешна с localhost. это мой код ниже:

  String mediaUploadResponse = registerMediaUpload(userId, headers);
        JsonNode mediaUpload = objectMapper.readTree(mediaUploadResponse);
        String uploadUrl = mediaUpload.findPath("uploadUrl").asText();

        HttpClient client = HttpClientBuilder.create().build();
        HttpPut request = new HttpPut(uploadUrl);
        request.addHeader("Content-Type", APPLICATION_OCTET_STREAM_VALUE);
        request.setHeader("X-Restli-Protocol-Version", "2.0.0");
        request.setHeader("Authorization", requireNonNull(headers.get(AUTHORIZATION)).get(0));
        Path tempFilePath = Files.createTempFile("linkedin", null);
        try (InputStream fileStream = new URL(fileUrl).openStream()) {
            Files.write(tempFilePath, fileStream.readAllBytes());
            File tempFile = tempFilePath.toFile();
            request.setEntity(new FileEntity(tempFile, IMAGE_PNG));
            HttpResponse response = client.execute(request);

            if (response.getStatusLine().getStatusCode() == 201) {
                log.info("------------------- media upload result {}", response.getEntity());
                return mediaUpload;
            } else {
                log.error("linkedin media upload request failed {}", request);
                throw new BadRequestException(response.toString());
            }
        } finally {
            boolean deleted = tempFilePath.toFile().delete();
            log.info("------------------- tempfile deleted: {}", deleted);
        }

mediaUpload - результат, полученный при регистрации загрузки мультимедиа по телефону POST https://api.linkedin.com/v2/assets?action=registerUpload

Я проверяю статус актива с помощью / v2 / assets / {asset-id}, и в конечном итоге я получаю:

{
    "recipes": [
        {
            "recipe": "urn:li:digitalmediaRecipe:feedshare-image",
            "status": "CLIENT_ERROR"
        }
    ],
    "serviceRelationships": [
        {
            "relationshipType": "OWNER",
            "identifier": "urn:li:userGeneratedContent"
        }
    ],
    "mediaTypeFamily": "STILLIMAGE",
    "created": 1588963432407,
    "id": "C4D22AQGIhdXwlSvDZQ",
    "lastModified": 1588963433173,
    "status": "ALLOWED"
}

Но при запуске с локального хоста все работает так, как ожидалось, и сообщение отображается в ленте компании.

Очень трудно понять, что может быть проблема.

1 Ответ

0 голосов
/ 09 мая 2020

Тем временем мне действительно удалось решить проблему. И проблема была вызвана тем фактом, что fileUrl был ссылкой на файл в корзине s3, связанной в качестве источника с развертыванием облачного интерфейса, к которому у меня был прямой доступ. Поэтому я использовал AmazonS3 s3client для прямого получения входного потока.

...