Как установить дату изменения на диске Google в iOS и предотвратить дублирование имен файлов

Я нашел способ в iOS (не очевидный для меня), чтобы вставить файл в папку на диске Google, используя стандартный queryForFilesInsertWithObject с uploadParameters и установив идентификатор папки в объекте GTLDriveParentReference, добавив этот объект в массив и назначив этот массив для Свойство "родители" загруженного файла. Что я еще не понял, так это как перезаписать любой существующий файл на диске Google новой версией без создания дубликата. Я также хотел бы отметить новый загруженный файл на диске Google с той же отметкой даты и времени, что и на моем локальном файле устройства. Когда я пытаюсь использовать метод file/update и устанавливаю file.modifiedDate и query.setModifiedDate=YES, я всегда получаю 400 Bad Request.

Я могу использовать patch, чтобы изменить заголовок, но я не могу установить ModifiedDate с помощью API. Мне удалось изменить модифицированную дату с помощью Google Попробуй! APIs 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,...

Выньте две строки с помощью параметра modifyDate, и заголовок файла google-drive будет полностью изменен. Я проследил в вызов API для executeQuery и обнаружил, что следующие результаты как "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"}

Кто-нибудь видит "Bad Request" в этом посте? Ошибка, возвращаемая из 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)}

У кого-нибудь есть какой-нибудь код для установки модифицированной даты, которая работает?

3 ответа

Вы хотите использовать queryForFilesUpdateWithObject вместо этого, чтобы обновить файл, используя оригинал fileId чтобы убедиться, что правильный файл обновлен.

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

Приведенный ниже код работает с 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}

Двойное имя файла избегается, если вы предоставляете тот же ранее существующий идентификатор (как, вероятно, объяснено в ответе выше). Измененная дата может быть установлена ​​с помощью конструкции GTLDateTime. Оба решения показаны ниже:

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;
Другие вопросы по тегам