在CN1中使用RESTAPI上传到Cloudinary

在CN1中使用RESTAPI上传到Cloudinary,rest,codenameone,cloudinary,Rest,Codenameone,Cloudinary,我正在尝试使用RESTAPI将我的图片上传到Cloudinary。来自CN1的Cloudinary库对我来说运行得非常好,但我希望能够控制一些事情,比如静默失败,以及能够添加到队列和添加到队列和等待 这是我的代码,我使用相机拍摄了一张照片,然后上传到Cloudinary,但它似乎不起作用: @Override protected void onMain_ButtonSubirAPIAction(Component c, ActionEvent event) { String pictur

我正在尝试使用RESTAPI将我的图片上传到Cloudinary。来自CN1的Cloudinary库对我来说运行得非常好,但我希望能够控制一些事情,比如静默失败,以及能够添加到队列和添加到队列和等待

这是我的代码,我使用相机拍摄了一张照片,然后上传到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) {
        }
    }
}
@覆盖
主按钮上的受保护的无效事件(组件c,ActionEvent事件){
字符串图片=Capture.capturePhoto(宽度-1);
如果(图片!=null){
字符串cloudinaryURL=”https://api.cloudinary.com/v1_1/“+CLOUDNAME+”/image/upload”;
MultipartRequest=新的MultipartRequest(){
受保护的void readResponse(InputStream输入)引发IOException{
JSONParser jp=新的JSONParser();
Map result=jp.parseJSON(新的InputStreamReader(输入,“UTF-8”));
labelX.setText((String)result.get(“url”);
}
};
request.setPost(true);
请求。设置HttpMethod(“POST”);
字符串encoded=Base64.encodeNoNewline((APIKEY+“:“+APISECRET).getBytes());
addRequestHeader(“授权”、“基本”+编码);
setUrl(cloudinaryURL);
试一试{
添加数据(“文件”、图片、“图像/jpeg”);
request.addArgument(“public_id”,“name1”);
NetworkManager.getInstance().addToQueue(请求);
}捕获(异常错误){
}
}
}
我一直在尝试修改API文档页面中指示的参数:

谢谢

编辑: 以下是语法:

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

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

您需要在代码中进行一些更改。 请看

api_key
api_secret
不应像您那样添加为
APIKEY+:“+apissecret
。此语法仅在使用管理API时使用,而不在上载API时使用

根据请求参数:

  • 您应该将
    api\u键
    参数设置包括在api\u键中
  • 您应该将
    时间戳
    参数设置为当前时间
  • 时间戳
    ,以及
    公共id
    和您的
    api\u机密
    。这应该是
    签名
    参数的值

你好,谢。我刚刚添加了你的台词,但我仍然收到一条“400错误请求”的消息。您认为addData()和addArgument()方法使用正确吗?您确实删除了@部分,对吗?你提供的链接不是为upload API部分提供的,但我认为URL应该包含图像名称,尽管这有点不清楚。是的,我删除了@。请看代码。我刚刚更新了它。我还添加了一个语法截图(URL和参数)。我假设我必须使用addArgument()方法添加“public_id”(上传图片的名称),并使用addData()方法添加路径