2016-06-22 91 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/