Я пытаюсь загрузить свои изображения в Cloudinary, используя их REST API. Библиотека Cloudinary от CN1 мне очень понравилась, но я хочу контролировать несколько вещей, например, 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

Благодарность

РЕДАКТИРОВАТЬ: Вот синтаксис:

enter image description here

1
Felipe 3 Май 2016 в 05:54

2 ответа

Лучший ответ

Вам необходимо внести некоторые изменения в свой код. См. этот раздел.

api_key и api_secret не следует добавлять как APIKEY + ":" + APISECRET, как вы это сделали. Этот синтаксис используется только при использовании Admin API, а не Upload API.

По параметрам запроса:

  • Вы должны включить параметр api_key в свой api_key.
  • Вы должны включить параметр timestamp, установленный на текущее время.
  • Этот timestamp вместе с public_id и вашим api_secret должен быть подписан. Это должно быть значение параметра signature.
2
Itay Taragano 4 Май 2016 в 22:44

Обозначение «@» используется для браузеров и не должно использоваться для запроса. Вам необходимо использовать базовую аутентификацию как таковую:

String encoded = Base64.encodeNoNewline((APIKEY + ":" + APISECRET).getBytes());
request.addRequestHeader("Authorization", "Basic " + encoded);
0
Shai Almog 3 Май 2016 в 03:47