在 CN1 中使用 REST API 上传到 Cloudinary

upload to Cloudinary using REST API in CN1

我正在尝试使用他们的 REST API 将我的照片上传到 Cloudinary。来自 CN1 的 Cloudinary 库对我来说效果很好,但我希望控制一些东西,比如 FailSilently 以及能够 addToQueue 和 addToQueueAndWait。

这是我的代码,我在其中使用相机拍照,然后上传到 Cloudinary,但它似乎不起作用:

@Override
protected void onMain_ButtonSubirAPIAction(Component c, ActionEvent event) {
    String picture = Capture.capturePhoto(width, -1);
    if(picture!=null){
        String cloudinaryURL = "https://api.cloudinary.com/v1_1/"+CLOUDNAME+"/image/upload";
        MultipartRequest request = new MultipartRequest() {
           protected void readResponse(InputStream input) throws IOException  {
              JSONParser jp = new JSONParser();
              Map <String, Object> result = jp.parseJSON(new InputStreamReader(input, "UTF-8"));
              labelX.setText((String)result.get("url"));
           }
        };

        request.setPost(true);
        request.setHttpMethod("POST");
        String encoded = Base64.encodeNoNewline((APIKEY + ":" + APISECRET).getBytes());
        request.addRequestHeader("Authorization", "Basic " + encoded);
        request.setUrl(cloudinaryURL);
        try {
            request.addData("file", picture, "image/jpeg");
            request.addArgument("public_id", "name1");
            NetworkManager.getInstance().addToQueue(request);
        } catch(Exception err) {
        }
    }
}

我一直在尝试修改其 API 文档页面中指示的参数:http://cloudinary.com/documentation/admin_api#usage_examples

谢谢

编辑: 语法如下:

“@”符号用于浏览器,不应用于请求。您需要这样使用基本身份验证:

String encoded = Base64.encodeNoNewline((APIKEY + ":" + APISECRET).getBytes());
request.addRequestHeader("Authorization", "Basic " + encoded);

您需要对代码进行一些更改。 请参阅 this section

不应像您那样将 api_keyapi_secret 添加为 APIKEY + ":" + APISECRET。此语法仅在使用 Admin API 时使用,而不是 Upload API.

请求参数:

  • 您应该将 api_key 参数设置为您的 api_key。
  • 您应该将 timestamp 参数设置为当前时间。
  • 这个 timestamp,以及 public_id 和你的 api_secret should be signed。这应该是 signature 参数的值。