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

Google drive api 如何在iOS中设置google驱动器文件的modifiedDate并防止重复文件名,google-drive-api,google-api-objc-client,Google Drive Api,Google Api Objc Client,我在iOS中找到了将文件插入google驱动器文件夹的方法(对我来说并不明显),使用标准的queryForFilesInsertWithObject和uploadParameters,在GTLDriveParentReference对象中设置文件夹id,将该对象添加到数组中,并将该数组分配给上传文件的“parents”属性。我还没有弄明白的是,如何在不创建副本的情况下用更新的版本覆盖任何现有的google drive文件。我还想在新上传的谷歌硬盘文件上加盖与本地设备文件相同的日期时间戳。当我尝试

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

我可以使用补丁更改标题,但是我不能使用api设置modifiedDate。我可以使用谷歌的Try it来更改修改后的日期!API浏览器,所以谷歌的服务器工作正常。以下是失败的代码:

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驱动器文件标题就可以更改了。我追踪到对executeQuery的api调用,发现以下结果为“DataToPost”

有人在这篇文章中看到“坏请求”吗?从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?

您想使用
queryForFilesUpdateWithObject
而不是使用原始的
fileId
来更新文件,以确保更新了正确的文件

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

您希望使用
queryforfileupdatewithobject
来更新文件,而不是使用原始文件的
fileId
来确保更新了正确的文件

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

如果您提供相同的预先存在的标识符,则可以避免重复的文件名(如上面的答案所述)。可以使用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;

如果您提供相同的预先存在的标识符,则可以避免重复的文件名(如上面的答案所述)。可以使用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;

下面的代码正在使用GoogleAppClient 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}

下面的代码正在使用GoogleAppClient 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}

这就是我用的。我首先使用queryForFilesInsertWithObject上传文件,该对象返回新的文件id;GTLQueryDrive*qu=[GTLQueryDrive QUERYFORFILEUPDATETWITHOBJECT:insertedFile fileId:insertedFileId uploadParameters:nil]qu.setModifieDate=YES;我得到:错误的请求代码:400。JSON和这个问题有关系吗?通常补丁比更新更合适;谢谢你,格罗宾斯,但我还是不能让它工作。我在上面扩展了我的问题,这就是我所用的。我首先使用queryForFilesInsertWithObject上传文件,该对象返回新的文件id;GTLQueryDrive*qu=[GTLQueryDrive QUERYFORFILEUPDATETWITHOBJECT:insertedFile fileId:insertedFileId uploadParameters:nil]qu.setModifieDate=YES;我得到:错误的请求代码:400。JSON和这个问题有关系吗?通常补丁比更新更合适;谢谢你,格罗宾斯,但我还是不能让它工作。我在上面扩展了我的问题。