Как установить дату изменения на диске 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;