Google Drive API V3 Загрузка возвращает 416 Ошибка - PullRequest
0 голосов
/ 27 января 2020

У меня есть подпапка bin на диске Google, которая имеет 1500-1600 bin-файлов и занимает около 1 ГБ в хранилище. Моя программа перестает загружать 544 файла, и я не знаю почему. Вот мои ограничения в консоли API Google:

  • Ограничение квоты
  • Количество запросов в день 1 000 000 000
  • Количество запросов в 100 секунд на пользователя 1 000
  • Количество запросов в 100 секунд 10 000

Вот метод для составления списка файлов bin.

public static final List<File> getbinfolderlist(Drive service, String bin_folder_id) throws IOException {
        try {
            List<File> list = new ArrayList<File>();
            String pageToken = null;
            do {
                FileList result = service.files().list()
                    .setQ("'" + bin_folder_id + "' in parents")
                    .setPageToken(pageToken)
                    .execute();
                    for (File file : result.getFiles()) {
                        list.add(file);
                    }
                    pageToken = result.getNextPageToken();
                } while (pageToken != null);
                return list;
        } catch (Exception e) {
            return null;
        }
    }

Выполнение этого в основном методе:

List<File> bin_files = getbinfolderlist(service, bin_folder_id);
System.out.println(bin_files.size());

возвращает точное количество файлов в папке bin, поэтому я знаю, что все файлы bin перечислены.

Метод итерации по списку и загрузки файлов bin заключается в следующем:

public static void downloadBinFiles(Drive service, List<File> bin_files, String dst_dir) {
        try {
            int i = 0;
            for (File file : files) {
                String fileId = file.getId();
                String fileName = file.getName();
                //need to check if folder exists. If not, create folder.
                System.out.println("File downloading is: " + fileName);
                OutputStream outputstream = new FileOutputStream(dst_dir + fileName);
                    service.files().get(fileId)
                        .executeMediaAndDownloadTo(outputstream);
                    outputstream.flush();
                    outputstream.close();
                i++;
                System.out.println(i + " files downloaded.");
                }
        } catch (Exception e) {
            Console console = System.console();
            console.writer().println("Error.");
        }
    }

И по какой-то причине в файле 544 всегда появляется сообщение «Ошибка». Есть ли какая-то квота, по которой я нажимаю Я не знаю, и нужно увеличить? Есть ли что-то в коде? Я использую эту команду, чтобы выполнить загрузку файлов bin в основном методе

downloadBinFiles(service, bin_files, bin_path );

Сообщение об ошибке, которое я получаю, это:

com.google.api.client.http.HttpResponseException: 416 Requested range not satisfiable
{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "requestedRangeNotSatisfiable",
    "message": "Request range not satisfiable"
   }
  ],
  "code": 416,
  "message": "Request range not satisfiable"
 }
}

        at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1070)
        at com.google.api.client.googleapis.media.MediaHttpDownloader.executeCurrentRequest(MediaHttpDownloader.java:245)
        at com.google.api.client.googleapis.media.MediaHttpDownloader.download(MediaHttpDownloader.java:199)
        at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeMediaAndDownloadTo(AbstractGoogleClientRequest.java:562)
        at com.google.api.services.drive.Drive$Files$Get.executeMediaAndDownloadTo(Drive.java:3256)
        at DriveQuickstart.downloadBinFiles(DriveQuickstart.java:223)
        at DriveQuickstart.main(DriveQuickstart.java:127)

Редактировать: Если это уместно, Размеры файлов bin варьируются от <0 КБ до чуть менее 14 000 КБ. Размер папки составляет 843 МБ. </p>

...