【问题标题】:How to set the modifiedDate on a google drive file in iOS AND prevent duplicate file names如何在 iOS 中的谷歌驱动器文件上设置 modifiedDate 并防止重复的文件名
【发布时间】:2016-08-10 16:30:32
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 这就是我使用的。我首先使用返回新文件 ID 的 queryForFilesInsertWithObject 上传文件。然后我使用:insertedFile.modifiedDate = myDate; GTLQueryDrive *qu = [GTLQueryDrive queryForFilesUpdateWithObject:insertedFile fileId:insertedFileId uploadParameters:nil] qu.setModifieDate = YES;我得到:错误的请求代码:400。 JSON 是否与问题有关?
    • 通常补丁比更新更合适;见code.google.com/p/google-api-objectivec-client/wiki/…
    • 谢谢,@grobbins,但我仍然无法让它工作。我在上面扩展了我的问题。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-16
        • 2021-08-29
        • 2021-10-22
        • 2016-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多