我在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?
答案 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}