[Java] Отменить загрузку Google Диска?


Answers

В комментарии я сказал, что посылка запроса в поток и прерывание вызова не работает. Поэтому я искал другой способ сделать это.

Я, наконец, нашел один, уродливый: Закройте InputStream загруженного файла!

Я инициализирую с помощью:

mediaContent = new InputStreamContent(NOTE_MIME_TYPE,new BufferedInputStream(new FileInputStream(fileContent)));
mediaContent.setLength(fileContent.length());

И у слушателя стопа у меня есть:

IOUtils.closeQuietly(mediaContent.getInputStream());

Конечно, это должно быть возможно сделать это лучше!

С уважением

Question

Я написал приложение, использующее официальный API для загрузки на Google диск, это отлично работает. Однако я никак не могу отменить загрузку. Я запускаю его в ASyncTask, пока я попытался сделать объект диска, путь к файлу, токен и несколько других переменных none. Я также попытался сделать недействительным токен, но, похоже, это только удаляет его из кеша и фактически не делает его недействительным на стороне сервера. Я вызвал отмену на ASyncTask, однако, если он отменяется после запуска загрузки, похоже, нет способа остановить его.

Моя проблема заключается в том, что пользователь начинает загружать 100-мегабайтный файл, поэтому нет возможности отменить его, а затем включить и отключить подключение к Интернету, что нецелесообразно. Это мой код загрузки:

  java.io.File jFile = new java.io.File(path); //Does not get file just info
                File body = setBody(jFile, mimeType);
                try
                {
                  java.io.File mediaFile = new java.io.File(path);
                  InputStreamContent mediaContent =
                      new InputStreamContent(mimeType,
                          new BufferedInputStream(new FileInputStream(mediaFile)));
                  mediaContent.setLength(mediaFile.length());
                  request = drive.files().insert(body, mediaContent);
                  request.getMediaHttpUploader().setProgressListener(new CustomProgressListener());
                  File file = request.execute();

Наверняка есть способ отменить загрузку?




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

Я установил progressListener для запроса на загрузку:

uploader.setProgressListener(new MediaHttpUploaderProgressListener() {
    @Override
    public void progressChanged(MediaHttpUploader uploader) throws IOException {
        if (cancelUpload) {
            //This was the only way I found to abort the download
            throw new GoogleDriveUploadServiceCancelException("Upload canceled");
        }
            reportProgress(uploader);
    }
});

Как вы можете видеть, я использовал логический элемент, который настроен извне, когда мне нужно прекратить загрузку. Если для этого логического значения установлено значение true, то при следующем обновлении процесса загрузки я потерпите крах, что приведет к аборту запроса.

Опять же, очень уродливый, но это был единственный способ заставить его работать