首页 > 解决方案 > 如何将带有“-i --upload-file”的 curl 调用转换为 java Unirest 或任何其他 http 请求?

问题描述

下面的示例使用 cURL 上传包含为二进制文件的图像文件。

curl -i --upload-file /path/to/image.png --header "Authorization: Token" 'https://url....' 

它工作正常。我需要从我的 Java 应用程序发出这个请求。

我试过下一个代码

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();

但是,它返回状态 400 Bad Request。有没有办法从Java调用这样的请求?

这是来自 LinkedIn v2 API 的请求: https ://docs.microsoft.com/en-us/linkedin/consumer/integrations/self-serve/share-on-linkedin?context=linkedin/consumer/context#upload-image -二进制文件

标签: javaapicurllinkedinunirest

解决方案


经过几个小时的头撞墙后,我终于弄清楚了如何将 curl 调用转换为RestClient调用(我使用的是 Ruby on Rails)。

我认为您遇到的问题是您必须在请求标头中将 MIME 类型作为 Content-Type 传递。

我正在使用MiniMagick来确定我上传到 LinkedIn 的图像的 MIME 类型。MiniMagick 还可以为您提供 LinkedIn 需要的图像的二进制字符串,因此这是一个双赢的局面。

这是最终奏效的电话:

file = MiniMagick::Image.open(FILE_PATH)
RestClient.post(UPLOAD_URL, file.to_blob, { 'Authorization': 'Bearer TOKEN', 'Content-Type': file.mime_type })

推荐阅读