正在将 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();
}
另一种方法是更新现有文件的内容,而不是创建新文件。
我正在开发一个将 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();
}
另一种方法是更新现有文件的内容,而不是创建新文件。