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\" \'http
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
private void uploadMedia(String uploadUrl,String accessToken) throws IOException {
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization","Bearer "+accessToken);
byte[] fileContents = Files.readAllBytes(new
File("path_to_local_file").toPath());
HttpEntity<byte[]> entity = new HttpEntity<>(fileContents, headers);
restTemplate.exchange(uploadUrl,HttpMethod.PUT, entity, String.class);
}
I think the curl command
curl -i --upload-file /path/to/image.png --header "Authorization: Token" 'https://url....'
uses PUT
while your Java client uses POST
Source: The man page of curl
.
-T, --upload-file <file>
This transfers the specified local file to the remote URL. If
there is no file part in the specified URL, Curl will append the
local file name. NOTE that you must use a trailing / on the last
directory to really prove to Curl that there is no file name or
curl will think that your last directory name is the remote file
name to use. That will most likely cause the upload operation to
fail. If this is used on an HTTP(S) server, the PUT command will
be used.
Not sure if this is the actual problem though. Your API doc link actually specifies POST
.
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:
file = MiniMagick::Image.open(FILE_PATH)
RestClient.post(UPLOAD_URL, file.to_blob, { 'Authorization': 'Bearer TOKEN', 'Content-Type': file.mime_type })