将PDF文件上传到Google云端硬盘文件夹并覆盖现有文件

问题描述

我正在开发一个将PDF文件上传到特定Google云端硬盘文件夹的应用。文件包括当前日期。以下代码适用于我的DriveServiceHelper.class,该代码用于在Google云端硬盘中创建文件夹,然后使用其folderID将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云端硬盘文件夹时,我想覆盖具有相同名称文件,但是即使文件名相同,由于分配的fileID不同,也会在该文件夹中创建重复文件

请帮助我了解如何解决此问题,以自动覆盖/替换已经存在的具有相同名称文件(每个文件均按日期区分),如果PDF文件不存在,则会创建一个新的PDF文件文件夹中。

我知道我可能正在使用不赞成使用的Drive API,但无法在线找到其他解决方案来帮助我实现所需的解决方案。我还遇到了一些解决方案,其中包括用于搜索现有Google云端硬盘文件查询,但是我不确定我是否知道如何使用它来使它对我有用。

谢谢

解决方法

Google云端硬盘支持多个具有相同名称的文件

因此,通过使用已经存在的名称创建文件,您将不会自动覆盖旧文件。

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

  • 将方法Files:listquery 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();
    }
 

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