【问题标题】:Uploading PDF file to Google Drive folder and overwriting existing file将 PDF 文件上传到 Google Drive 文件夹并覆盖现有文件
【发布时间】:2021-01-09 12:25:16
【问题描述】:

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

请帮助我理解我应该如何去做,自动覆盖/替换已经存在的同名文件(每个文件按日期区分),如果 PDF 文件不存在,则会创建一个新的 PDF 文件在文件夹中。

我了解我可能正在使用已弃用的 Drive API,但我无法在网上找到其他解决方案来帮助我实现所需的功能。我还遇到了一些解决方案,其中包括搜索现有 Google Drive 文件的查询,但我不确定我是否了解如何使用它来使其适合我。

谢谢

【问题讨论】:

    标签: android-studio pdf deprecated google-drive-android-api


    【解决方案1】:

    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();
        }
     
    

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

    【讨论】:

    • 谢谢,我遇到了这个解决方案。但是您能否给我一个示例,说明如何使用查询来搜索具有名称和 ID 的现有文件?我真的很感激,因为那是我面临的问题
    • 我不使用 mobiel 应用程序,但我用 Java 示例更新了我的答案 - 我希望这会有所帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 2023-01-16
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    相关资源
    最近更新 更多