创建Linkedin图片ugcPost在从localhost发布时可以工作,但从AWS ECS发布时不行。

问题描述 投票:0回答:1

我正在按照这里的文档在我的java应用中创建公司简介的图片共享-->https:/docs.microsoft.comen-uslinkedinconsumerintegrationsself-serveshare-onlinkedin#cake-an-image-share。

我遇到的问题是,从AWS ECS FARGATE容器上传文件成功后(我得到201),但在本地主机上发布成功,这是我的以下代码。

  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

我使用v2assets{asset-id}来检查资产状态,最终得到的结果是:"我的资产已经被冻结了。"但当我在本地主机上运行时,一切都能正常工作,帖子也显示在公司的feed上。

{
    "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"
}

但当我从本地主机运行时,一切都能如期进行,帖子也显示在公司的feed上。

我真的很想知道问题出在哪里。

linkedin amazon-ecs linkedin-api
1个回答
0
投票

其实在这期间我已经成功解决了这个问题。而这个问题是由以下事实引起的 fileUrl 是一个指向 s3 bucket 中一个文件的链接,该文件作为源点链接到我可以直接访问的 cloudfront 部署。所以我使用AmazonS3 s3client直接获取输入流。

© www.soinside.com 2019 - 2024. All rights reserved.