Parse Android не может загрузить изображение с постоянной ошибкой перемещения

Я получаю следующее исключение при попытке загрузить ParseFile с использованием метода getData().

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, который загружается, а затем помещается в ParseObject с именем ImageObject. 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);
        }
    }

мой код загрузки в значительной степени ParseFile.getFile() после того, как я получил все ImageObjects через ParseQuery.

Я следил за строкой 43 ParseAWSRequest.java и нашел это,

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», и тот факт, что загрузка работает нормально. Я вижу загруженное изображение с помощью панели управления на моем сервере.

С использованием,

  • Сервер синтаксического анализа 2.2.13
  • Анализ Android SDK 1.13.1
  • Панель анализа 1.0.14

person wanpanman    schedule 22.06.2016    source источник


Ответы (1)


Я нашел обходной путь к этой проблеме, просто загрузив файл напрямую. Я использовал метод ParseFile.getUrl(), чтобы получить URL-адрес, а затем использовать его для загрузки и использования файла.

В моем случае это было .jpg файла. А затем я использовал внешнюю библиотеку, которая позаботится обо всей загрузке/кэшировании/загрузке в изображения.

Обе эти библиотеки работают хорошо

https://github.com/koush/ion

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

person wanpanman    schedule 27.06.2016