The example below uses cURL to upload image file included as a binary file.
curl -i --upload-file /path/to/image.png --header "Authorization: Token" 'https://url....'
It works fine. I need to make this request from my Java application.
I have tried next code
URL image_url = Thread.currentThread().getContextClassLoader().getResource("jobs_image.jpg");
String path = image_url.getFile();
HttpResponse<String> response = Unirest.post(uploadUrl)
.header("cache-control", "no-cache")
.header("X-Restli-Protocol-Version", "2.0.0")
.header("Authorization", "Bearer " + token + "")
.field("file", new File(path))
.asString();
However, it returns status 400 Bad Request. Is there any way to call such request from Java?
This is a request from LinkedIn v2 API: https://docs.microsoft.com/en-us/linkedin/consumer/integrations/self-serve/share-on-linkedin?context=linkedin/consumer/context#upload-image-binary-file
Below method will upload the image to linkedIn
Reference : https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/shares/vector-asset-api#upload-the-image
After several hours of banging my head against the wall, I finally figured out how to convert the curl call into a RestClient one (I'm using Ruby on Rails).
I think the problem you're having is that you have to pass the MIME type as the Content-Type in the request headers.
I'm using MiniMagick to figure out the MIME type of the image I'm uploading to LinkedIn. MiniMagick can also give you the binary string of the image that LinkedIn requires, so it's a win-win situation.
This is the call that finally worked:
I think the curl command
curl -i --upload-file /path/to/image.png --header "Authorization: Token" 'https://url....'
uses
PUT
while your Java client usesPOST
Source: The man page of
curl
.Not sure if this is the actual problem though. Your API doc link actually specifies
POST
.