Codenameone 代码名1-将图片上载到Filestack

Codenameone 代码名1-将图片上载到Filestack,codenameone,Codenameone,我想使用我的CN1应用程序将图片上传到Filestack(以前的Filepicker.io)。我正在使用他们的RESTAPI来实现这一点。我正在使用MultipartRequest类,运行应用程序后,我可以在他们的网站上看到有东西正在上传,因为文件的大小与拍摄的照片大小相同,但我看不到照片 我的代码中缺少什么吗 public void pictureUpload() { String picture = Capture.capturePhoto(1024, -1); if(pic

我想使用我的CN1应用程序将图片上传到Filestack(以前的Filepicker.io)。我正在使用他们的RESTAPI来实现这一点。我正在使用MultipartRequest类,运行应用程序后,我可以在他们的网站上看到有东西正在上传,因为文件的大小与拍摄的照片大小相同,但我看不到照片

我的代码中缺少什么吗

public void pictureUpload() {
    String picture = Capture.capturePhoto(1024, -1);
    if(picture!=null){
        String filestack = "https://www.filestackapi.com/api/store/S3?key=MY_KEY&filename=myPicture.jpg";
        MultipartRequest request = new MultipartRequest();
        request.setUrl(filestack);
        resquest.setPost(true);
        request.setHttpMethod("POST");
        try {
            request.addData("i", picture, "image/jpeg");
            request.setContentType("image/jpeg");
            NetworkManager.getInstance().addToQueue(request);
        } catch(IOException err) {
            err.printStackTrace();
        }
    }
}

从他们的网站上看:

curl -X POST -F fileUpload=@ada.jpg https://www.filestackapi.com/api/store/S3?key=Am3XXBhQ4SxiEQU7cLfM5z
{"url": "https://www.filestackapi.com/api/file/cTy7LpA6SfyG26Wzz7Rx", "size": 124928, "type": "image/jpg", "filename": "filename"}
文件名似乎不应出现在上述参数中:

public void pictureUpload(final Callback<String> resultURL) {
    String picture = Capture.capturePhoto(1024, -1);
    if(picture!=null){
        String filestack = "https://www.filestackapi.com/api/store/S3?key=MY_KEY&filename=myPicture.jpg";
        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"));
              String url = (String)result.get("url");
              if(url == null) {
                 resultURL.onError(null, null, 1, result.toString());
                 return;
              }
              resultURL.onSucess(url);
           }
        };
        request.setUrl(filestack);
        try {
            request.addData("fileUpload", picture, "image/jpeg");
            request.setFilename("fileUpload", "myPicture.jpg");
            NetworkManager.getInstance().addToQueue(request);
        } catch(IOException err) {
            err.printStackTrace();
        }
    }
}
public void pictureUpload(最终回调结果){
字符串picture=Capture.capturePhoto(1024,-1);
如果(图片!=null){
字符串filestack=”https://www.filestackapi.com/api/store/S3?key=MY_KEY&filename=myPicture.jpg";
MultipartRequest=新的MultipartRequest(){
受保护的void readResponse(InputStream输入)引发IOException{
JSONParser jp=新的JSONParser();
Map result=jp.parseJSON(新的InputStreamReader(输入,“UTF-8”));
字符串url=(字符串)result.get(“url”);
如果(url==null){
resultur.onError(null,null,1,result.toString());
返回;
}
结果生成(url);
}
};
setUrl(filestack);
试一试{
请求添加数据(“文件上传”,图片,“图像/jpeg”);
setFilename(“fileUpload”,“myPicture.jpg”);
NetworkManager.getInstance().addToQueue(请求);
}捕获(IOException err){
err.printStackTrace();
}
}
}
还删除了不必要的
setPost
和post方法,因为它们是默认值

还添加了一些JSON结果解析,以便更好地度量和一些回调URL结果,因为这看起来是multipart类的一个很好的示例


因此,我已经将答案的要点嵌入到javadocs中。

回调参数的目的是什么?在实现该方法时,它应该来自哪里?(1000谢谢上面的回答)回调是为了方便方法的完成。您的代码没有从webservice读取结果,webservice是一个包含上传文件链接的JSON文件。我对它进行了解析,并将结果文件的URL发回(请注意,我没有对此进行测试,因此如果有bug,请告诉我)。生成的文件链接可能对您的应用程序很重要。请注意,回调接口内置于Codename One。