Codename One - 将图片上传到Filestack

时间:2016-02-22 01:28:21

标签: codenameone

我想使用我的CN1应用程序将图片上传到Filestack(以前的Filepicker.io)。我正在使用他们的REST API来实现这一目标。我正在使用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();
        }
    }
}

1 个答案:

答案 0 :(得分:3)

从他们的网站上看这个:

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

同时删除了setPost和post方法,因为这些是默认值。

还添加了一些JSON结果解析以获得良好的度量和一些回调URL结果,因为这看起来是多部分类的一个很好的例子。

所以我已经为gavadocs中的GIST提供了答案。