Parse Android无法下载带有永久移动错误的图片

时间:2016-06-22 01:18:24

标签: android nginx parse-platform parse-server parse-android-sdk

尝试使用getData()方法下载ParseFile时出现以下异常。

com.parse.ParseException: Download from S3 failed. Moved Permanently
  at com.parse.ParseAWSRequest.onResponseAsync(ParseAWSRequest.java:43)
  at com.parse.ParseRequest$3.then(ParseRequest.java:137)
  at com.parse.ParseRequest$3.then(ParseRequest.java:133)
  at bolts.Task$15.run(Task.java:917)
  at bolts.BoltsExecutors$ImmediateExecutor.execute(BoltsExecutors.java:105)
  at bolts.Task.completeAfterTask(Task.java:908)
  at bolts.Task.continueWithTask(Task.java:715)
  at bolts.Task.continueWithTask(Task.java:726)
  at bolts.Task$13.then(Task.java:818)
  at bolts.Task$13.then(Task.java:806)
  at bolts.Task$15.run(Task.java:917)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
  at java.lang.Thread.run(Thread.java:818)

ParseFile是一个jpg,上传然后放入名为ImageObject的ParseObject中。 ImageObject还有其他几个参数,如标题,宽度,高度,可以正确上传和下载。通过仪表板确认图像本身正确上传。只有在下载过程中我才会遇到上述异常。

这是我的上传代码

file.saveInBackground(new SaveCallback() {
    @Override
    public void done(ParseException e) {
        if (e == null) {
            Log.d(tag, "Successfully uploaded image file");

            ParseObject image = new ParseObject("imageObject");  //Create new Image-ParseObject and set values
            image.put("author", ParseUser.getCurrentUser());
            image.put("imageFile", file);
            image.put("caption", caption);

            image.saveInBackground(new SaveCallback() {
                @Override
                public void done(ParseException e) {
                    if(e==null){
                        Log.d(tag, "Successfully saved image file to object");
                    }else{
                        Log.d(tag, "Failed to save image file to object", e);
                    }
                }
            });
        } else {
            Log.d(tag, "Failed to save image", e);
        }
    }
在通过ParseQuery检索了所有ParseFile.getFile()后,我的下载代码非常ImageObjects

我跟着ParseAWSRequest.java的第43行,我发现了这个,

if (statusCode >= 200 && statusCode < 300 || statusCode == 304) {
    // OK
} else {
    String action = method == ParseHttpRequest.Method.GET ? "Download from" : "Upload to";
    return Task.forError(new ParseException(ParseException.CONNECTION_FAILED, String.format(
        "%s S3 failed. %s", action, response.getReasonPhrase())));
}

这个和“永久删除”指向我的nginx反向代理,它在重定向中返回301代码到https。不幸的是,我不知道从哪里开始。

额外信息, 我已经阻止防火墙中的端口80(http)进行测试,似乎对于下载parse-android-sdk正试图从http下载。这很奇怪,因为我已经使用“https”指定了我的parse-server链接,以及上传工作正常的事实。我可以在服务器上使用仪表板查看上传的图像。

使用,

  • Parse Server 2.2.13
  • 解析Android SDK 1.13.1
  • Parse Dashboard 1.0.14

1 个答案:

答案 0 :(得分:1)

我通过直接下载文件找到了解决此问题的方法。我使用ParseFile.getUrl()方法获取网址,然后使用该方法下载并使用该文件。

在我的情况下,它是.jpg个文件。然后我使用了一个外部库来处理所有下载/缓存/加载到imageview。

这两个图书馆都运作良好

https://github.com/koush/ion

http://square.github.io/picasso/