如何在iOS中的google驱动器文件上设置modifiedDate并防止重复的文件名

时间:2013-01-07 09:42:08

标签: google-drive-api google-api-objc-client

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

我可以使用补丁来更改标题,但我无法使用api设置modifiedDate。我能够使用Google的Try it改变modifiedDate! API Explorer,因此Google的服务器运行正常。这是失败的代码:

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

有没有人有一些代码来设置有效的modifiedDate?

3 个答案:

答案 0 :(得分:1)

您希望使用queryForFilesUpdateWithObject来使用原始fileId更新文件,以确保更新正确的文件。

+ (id)queryForFilesUpdateWithObject:(GTLDriveFile *)object
                         fileId:(NSString *)fileId
               uploadParameters:(GTLUploadParameters *)uploadParametersOrNil {

答案 1 :(得分: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;

答案 2 :(得分: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}