1

我在 iOS 中找到了一种方法(对我来说并不明显),使用标准 queryForFilesInsertWithObject 和 uploadParameters 将文件插入到谷歌驱动器文件夹中,并在 GTLDriveParentReference 对象中设置文件夹 id,将该对象添加到数组中,并将该数组分配给上传文件的“父母”属性。我还没有想出的是如何用新版本覆盖任何现有的谷歌驱动器文件而不创建副本。我还想用与我的本地设备文件相同的日期时间戳来标记新上传的谷歌驱动器文件。当我尝试使用文件/更新方法并设置 file.modifiedDate 和 query.setModifiedDate=YES 时,我总是收到 400 Bad Request。

我可以使用patch来更改标题就好了,但是我不能使用api设置modifiedDate。我能够使用 Google 的 Try it 更改 modifiedDate!APIs Explorer,所以谷歌的服务器工作正常。这是失败的代码:

GTLDriveFile *file = [GTLDriveFile object];
NSString *fId = insertedFile.identifier;
file.title = @"Tony.jpg";
file.modifiedDate = myNewGoogleDate; // "2012-12-31T08:00:00+00:00"

GTLQueryDrive *qu = [GTLQueryDrive queryForFilesPatchWithObject:file fileId:fId];
qu.setModifiedDate = YES;

[service executeQuery:qu completionHandler:^(GTLServiceTicket *ticket,...

用 modifiedDate 取出两行,google-drive 文件标题更改得很好。我追踪了对executeQuery的api调用,发现以下结果为“DataToPost”。

{"method":"drive.files.patch","id":"gtl_7","jsonrpc":"2.0",
"params": {"setModifiedDate":true,"resource":
{"modifiedDate":"2012-12-31T08:00:00+00:00",
"title":"Tony.jpg"},"fileId":"0BxRlXPR_hfR9OEJSdDdyQjkyaE0"},"apiVersion":"v2"}

有人在这篇文章中看到“错误请求”吗?从 executeQuery 返回的错误是:

Error Domain=com.google.GTLJSONRPCErrorDomain Code=400 "The operation couldn’t be
completed. (Bad Request)" UserInfo=0x80724b0 {error=Bad Request,
GTLStructuredError=GTLErrorObject 0x806a7a0: {message:"Bad Request" code:400 data:[1]},
NSLocalizedFailureReason=(Bad Request)}

有没有人有一些代码来设置修改日期有效?

4

3 回答 3

1

您想改用queryForFilesUpdateWithObject原始文件来更新文件,fileId以确保更新正确的文件。

+ (id)queryForFilesUpdateWithObject:(GTLDriveFile *)object
                         fileId:(NSString *)fileId
               uploadParameters:(GTLUploadParameters *)uploadParametersOrNil {
于 2013-01-08T01:14:59.243 回答
0

如果您提供相同的预先存在的标识符(可能在上面的答案中解释),则可以避免重复的文件名。可以使用 GTLDateTime 构造设置 modifiedDate。两种解决方案如下所示:

NSString *fileID = gF.identifier;
gF.modifiedDate  = [GTLDateTime dateTimeWithDate:myNSDate timeZone:[NSTimeZone localTimeZone]];

if (fileID==0) query  = [GTLQueryDrive queryForFilesInsertWithObject:gF               uploadParameters:upParams];
else           query  = [GTLQueryDrive queryForFilesUpdateWithObject:gF fileId:fileID uploadParameters:upParams];
query.setModifiedDate = YES;
于 2014-09-17T00:58:46.920 回答
0

下面的代码正在使用 GoogleAPIClient v3,我看不到任何错误的请求。

driveFile = [GTLDriveFile object];
driveFile.modifiedTime  = [GTLDateTime dateTimeWithDate:[NSDate date] timeZone:[NSTimeZone localTimeZone]];

output:
(lldb) po driveFile.modifiedTime
GTLDateTime 0x157a06470: {2016-08-10T13:44:33.609+05:30}
于 2016-08-10T08:30:32.003 回答