2016-06-22 11 views
0

Ich erhalte die folgende Ausnahme, wenn ich versuche, ein ParseFile unter Verwendung der Methode getData() herunterzuladen.Parse Android schlägt fehl, Bild mit einem verschobenen dauernden Fehler zu downloaden

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) 

Die ParseFile ist ein jpg, die dann in eine ParseObject ImageObject genannt setzen hochgeladen. Die ImageObject hat mehrere andere Parameter wie Bildunterschrift, Breite, Höhe, die korrekt hochgeladen und heruntergeladen werden. Das Bild selbst wird korrekt hochgeladen, wie über das Dashboard bestätigt. Nur während des Downloads bekomme ich die obige Ausnahme.

Dies ist mein Upload-Code

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

mein Downloadcode ziemlich ParseFile.getFile() ist, nachdem ich abgerufen haben alle ImageObjects durch eine parseQuery.

I Gefolgt Linie 43 von ParseAWSRequest.java und ich fand dies,

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

Dies und die "dauerhaft entfernt" zeigt auf meine nginx Reverse Proxy, der auf https ein 301-Code in der Umleitung zurückgibt. Leider bin ich mir nicht sicher, wo ich von hier aus fortfahren soll.

Zusätzliche Informationen, Ich habe Port 80 (http) in der Firewall für einen Test blockiert und es scheint, dass für den Download parse-android-sdk versucht, von http herunterladen. Das ist seltsam, weil ich meinen Parse-Server-Link mit "https" angegeben habe, und die Tatsache, dass der Upload gut funktioniert. Ich kann das hochgeladene Bild mithilfe des Dashboards auf meinem Server sehen.

verwenden,

  • Parse Server 2.2.13
  • Parse Android SDK 1.13.1
  • Parse Armaturenbrett 1.0.14

Antwort

1

fand ich zu diesem Thema eine Abhilfe nur durch direkte Herunterladen der Datei Ich habe ParseFile.getUrl() Methode verwendet, um die URL zu erhalten und dann verwenden, um die Datei herunterzuladen und zu verwenden. In meinem Fall war es .jpg Dateien. Und dann habe ich eine externe Bibliothek verwendet, die sich um das Herunterladen/Caching/Laden in Bildansichten kümmert.

Beide Bibliotheken arbeiten gut

https://github.com/koush/ion

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