Google Drive API支持人员,
过去几天,我们遇到了Google云端硬盘的严重问题。
我们无法再使用图片更新文档文档。当我们的iPhone应用程序发送更新包含图像的Docs文档的请求时,服务器返回OK,但内部图像将永远不会上传。
此处重现问题的代码。
- (void)selfOverwriteSelectedFile:(GTLDriveFile *)gtlDriveFile
{
// -- not working type -- can't upload images on ODT, HTML, RTF, PDF
NSString *mimetype = @"application/vnd.oasis.opendocument.text"; //@"text/html" @"application/rtf" @"application/pdf"
//works: DOCX
//NSString *mimetype = @"application/vnd.openxmlformats-officedocument.wordprocessingml.document";
NSString *downloadUrl = [gtlDriveFile.exportLinks additionalPropertyForName:mimetype];
//1st request: download the file
GTMHTTPFetcher *fetcher = [self.driveService.fetcherService fetcherWithURLString:downloadUrl];
[fetcher beginFetchWithCompletionHandler:^(NSData *data, NSError *error) {
//2nd request: re-upload the same file
gtlDriveFile.mimeType = mimetype;
GTLUploadParameters *uploadParameters = [GTLUploadParameters uploadParametersWithData:data MIMEType:mimetype];
GTLQueryDrive *query = [GTLQueryDrive queryForFilesUpdateWithObject:gtlDriveFile fileId:gtlDriveFile.identifier uploadParameters:uploadParameters];
query.convert = query.newRevision = query.setModifiedDate = YES;
[self.driveService executeQuery:query completionHandler:^(GTLServiceTicket *ticket, GTLDriveFile *newGtlFile, NSError *error2nd) {
}];
}];
}
//replace the method for easy-test
-(void)duplicateSelectedFile
{
GTLDriveFile *selectedFile = [self selectedFileListEntry];
[self selfOverwriteSelectedFile:selectedFile];
}
为了最简单的复制,
仅供参考,odt / html / rtf / pdf导入不起作用。但是,docx导入有效。
请尽快解决问题。
感谢您的支持。
答案 0 :(得分:0)
(void)loadFileContent {
alert = [DrEditUtilities showLoadingMessageWithTitle:@"Loading file content"
delegate:self];
self.webView.delegate = self;
NSString *exportURLStr = nil;
NSString *downloadUrlStr = nil;
if (![self.driveFile.downloadUrl length] > 0) {
if ([exportURLStr length] == 0) {
exportURLStr = [self.driveFile.exportLinks JSONValueForKey:@"text/plain"];
}
if([exportURLStr length] == 0)
{
exportURLStr = [self.driveFile.exportLinks JSONValueForKey:@"image/jpeg"];
self.webView.hidden= FALSE;
NSString *imgHTMLTag = [NSString stringWithFormat:@"<img src=\"file://%@\" />", exportURLStr];
if ([imgHTMLTag length] != 27) { // null
[self.webView loadHTMLString:imgHTMLTag baseURL:nil];
[alert dismissWithClickedButtonIndex:0 animated:YES];
return;
}
}
if([exportURLStr length] == 0)
{
exportURLStr = [self.driveFile.exportLinks JSONValueForKey:@"application/pdf"];
self.webView.hidden= FALSE;
NSURL *targetURL = [NSURL URLWithString:exportURLStr];
NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
[self.webView loadRequest:request];
[alert dismissWithClickedButtonIndex:0 animated:YES];
return;
}
if ([exportURLStr length] != 0) {
GTMHTTPFetcher *fetcher =
[self.driveService.fetcherService fetcherWithURLString:exportURLStr];
[fetcher beginFetchWithCompletionHandler:^(NSData *data, NSError *error) {
[alert dismissWithClickedButtonIndex:0 animated:YES];
if (error == nil) {
NSString* fileContent = [[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
self.webView.hidden = TRUE;
self.textView.text = fileContent;
self.originalContent = [fileContent copy];
} else {
NSLog(@"An error occurred: %@", error);
[DrEditUtilities showErrorMessageWithTitle:@"Unable to load file"
message:[error description]
delegate:self];
}
}];
}
else
{
[alert dismissWithClickedButtonIndex:0 animated:YES];
}
}
else
{
downloadUrlStr = self.driveFile.downloadUrl;
NSLog(@"%@",downloadUrlStr);
NSArray *arr = [downloadUrlStr componentsSeparatedByString:@"&"];
urlString = [arr objectAtIndex:0];
NSURL *url =[NSURL URLWithString:urlString];
NSURLRequest *urlRequest=[NSURLRequest requestWithURL:url];
self.webView.hidden = FALSE;
[self.webView loadRequest:urlRequest];
[alert dismissWithClickedButtonIndex:0 animated:YES];
[self performSelector:@selector(downloadFile) withObject:nil afterDelay:0.5];
// [self downloadFile];
}
}