2016-06-22 93 views
0

当使用getData()方法尝试下载ParseFile时出现以下异常。解析Android无法下载永久移动的图像

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是被上载,然后放入一个的parseObject JPG称为ImageObjectImageObject还有其他几个参数,如正确上传和下载的标题,宽度和高度。图像本身通过仪表板确认正确上传。只有在下载期间,我收到了上述例外。

这是我上传的代码

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

我下载的代码是非常ParseFile.getFile()我已经检索到后,所有的ImageObjects通过ParseQuery。

我跟着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的反向代理,这在重定向到HTTPS返回一个301码。不幸的是,我不确定从这里出发。

其他信息, 我已经阻止端口80(http)在防火墙中进行测试,似乎下载解析-Android-sdk正尝试从http下载。这很奇怪,因为我已经用“https”指定了我的分析服务器链接,并且上传工作正常。我可以在我的服务器上使用仪表板查看上传的图像。

使用,

  • 解析服务器2.2.13
  • 解析Android SDK中1.13.1
  • 解析仪表盘1.0.14

回答

1

我发现了一个解决方法,这一问题仅仅通过直接下载文件。我使用ParseFile.getUrl()方法来获取url,然后使用它来下载和使用该文件。

在我的情况下,这是.jpg文件。然后我使用了一个外部库,负责将所有下载/缓存/加载到图像浏览中。

这些库的工作都很好

https://github.com/koush/ion

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