正在将 PDF 文件上传到 Google Drive 文件夹并覆盖现有文件

Uploading PDF file to Google Drive folder and overwriting existing file

我正在开发一个将 PDF 文件上传到特定 Google Drive 文件夹的应用程序。文件名包括当前日期。以下代码适用于我的 DriveServiceHelper.class,用于在 Google 驱动器中创建一个文件夹,然后使用其文件夹 ID 将 PDF 文件上传到该文件夹​​:

public class DriveServiceHelper {

Calendar c = Calendar.getInstance();
Date d = c.getTime();
SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy");
String currentDate = df.format(d);
String ps_FolderKey;

private final Executor mExecutor = Executors.newSingleThreadExecutor();
private Drive mDriveService;

public DriveServiceHelper(Drive mDriveService) {
    this.mDriveService = mDriveService;
}

public Task<String> createFolder() {
    return Tasks.call(mExecutor, () -> {
        File folderMetadata = new File();
        folderMetadata.setName("Covid Assessment Sheets");
        folderMetadata.setMimeType("application/vnd.google-apps.folder");

        File myFolder = null;
        try {
            myFolder = mDriveService.files().create(folderMetadata)
                    .setFields("id")
                    .execute();
            System.out.println("Folder ID: " + myFolder.getId());
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (myFolder == null) {
            throw new IOException("Null result when requesting file creation");
        }
        ps_FolderKey = myFolder.getId();
        return ps_FolderKey;
    });
}

public Task<String> createFilePDF(String filePath, String folderId) {
    return Tasks.call(mExecutor, () -> {
        File fileMetaData = new File();
        fileMetaData.setName("Covid Assessment @ " + currentDate);
        fileMetaData.setParents(Collections.singletonList(folderId));
        java.io.File file = new java.io.File(filePath);
        FileContent mediaContent = new FileContent("application/pdf", file);

        File myFile = null;
        try {
            myFile = mDriveService.files().create(fileMetaData, mediaContent).execute();
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (myFile == null) {
            throw new IOException("Null result when requesting file creation");
        }
        return myFile.getId();
    });
}
}

将相同的 PDF 上传到 Google Drive 文件夹时,我想覆盖具有相同名称的文件,但在文件夹中创建了重复文件,因为分配的文件 ID 不同,即使文件名是一样。

请帮助我理解我应该如何处理这个问题,自动 overwrite/replace 已经存在的同名文件(每个文件按日期区分),如果 PDF文件夹中不存在文件。

我知道我可能正在使用已弃用的驱动器 API,但我无法在网上找到其他解决方案来帮助我实现我需要的功能。我还遇到了一些解决方案,其中包括用于搜索现有 Google 驱动器文件的查询,但我不确定我是否了解如何使用它来让它为我工作。

谢谢

Google驱动器支持多个同名文件

因此,通过使用已有名称创建文件,您不会自动覆盖旧文件。

相反,您应该执行以下操作:

  • 使用方法Files:list with the query name = 'Covid Assessment Sheets'查找已经存在的同名文件
  • 如果需要,您还可以通过指定 mimeType 和父文件夹 (parents)
  • 来缩小结果范围
  • 检索列表结果id
  • 使用方法Files:delete删除现有文件
  • 像您已经在做的那样继续创建一个新文件

在 Java 中,这将如下所示:

FileList result = DriveService.files().list()
                .setQ("name = 'Covid Assessment Sheets'");
                .setFields("files(id)")
                .execute();
List<File> files = result.getFiles();
    for (File file : files) {
        DriveService.files().delete(file.getId()).execute();
    }
 

另一种方法是更新现有文件的内容,而不是创建新文件。