在Google驱动器上备份本地数据库始终会创建一个不同的文件ID

问题描述 投票:0回答:1

我正在创建一个有待办事项的待办事项列表应用程序,我希望我的用户能够在Google云端硬盘上备份其任务。这是我正在使用的代码:

// Create the file we want to upload.
ga.File fileToUpload = ga.File();
var file = await _localFile;
fileToUpload.parents = ["appDataFolder"];
fileToUpload.name = path.basename(file.absolute.path);

// Create a new back-up file on google drive.
var response = await drive.files.create(
  fileToUpload,
  uploadMedia: ga.Media(file.openRead(), file.lengthSync()),
);

// Get the file id.
   fileId = response.id;

问题是,每次我获得不同的文件ID时,我都需要检索该文件从谷歌驱动器始终具有相同的文件ID,而不是每次都具有不同的ID。

我尝试使用update方法而不是create方法:

ga.File fileToUpload = ga.File();
var file = await _localFile;
fileToUpload.parents = ["appDataFolder"];
fileToUpload.name = path.basename(file.absolute.path);
drive.files.update(fileToUpload, fileId);

但是我得到未处理的异常:DetailedApiRequestError(状态:403,消息:在更新请求中不能直接写出Parents字段。请改用addParents和removeParents参数。)

在使用create方法之前,我还试图设置文件ID:

fileToUpload.id = fileId;
      await drive.files.create(
        fileToUpload,
        uploadMedia: ga.Media(file.openRead(), file.lengthSync()),
      );

但是我得到未处理的异常:DetailedApiRequestError(状态:400,消息:提供的文件ID不能使用。)或具有该ID的文件已经存在。

因此,我尝试从Google驱动器中删除文件,然后使用相同的ID重新创建它:

fileToUpload.id = fileId;
  drive.files.get(fileId).then((value) {
    if (value != null) {
      drive.files.delete(fileId).then((value) {
        drive.files.create(
          fileToUpload,
          uploadMedia: ga.Media(file.openRead(), file.lengthSync()),
        );
      });
    } else {
      drive.files.create(
        fileToUpload,
        uploadMedia: ga.Media(file.openRead(), file.lengthSync()),
      );
    }
  });

但是我也收到未处理的异常:DetailedApiRequestError(状态:400,消息:提供的文件ID不可用。)即使我使用的是Google驱动器为原始文件指定的相同文件ID。

任何解决方案?

flutter dart google-drive-api
1个回答
0
投票

首先需要检查文件名是否存在于驱动器中。由于没有直接的API从Google驱动器中提取具有名称的文件,因此您需要使用List api并先获取文件,然后再检查其名称

为此,您可以使用以下查询

List api

获得响应后,您可以检查文件名是否存在。如果获取其ID并触发文件的{ q: `'appDataFolder' in parents and trashed = false` } 。但是,您可以在查询中传递update call而不是[C0

update call

如果找不到该文件,则按照创建新文件的方法进行

parents
© www.soinside.com 2019 - 2024. All rights reserved.