Google云端硬盘(文档)导入错误:图片未在更新的文档文件中显示

时间:2012-12-13 04:31:36

标签: objective-c google-drive-api

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];
}

为了最简单的复制,

  1. 下载最新的“用于Objective-C的Google API客户端库”。
  2. 在XCode中打开DriveSample项目。
  3. 将“ - (void)duplicateSelectedFile”方法替换为代码。
  4. 编译并执行修改后的示例应用程序“获取文件列表”,选择带有图像的文档文件,然后点击“复制”。
  5. 应使用相同的内容覆盖所选文件。但是,里面的图像都丢失了(在无休止的等待上传状态下)。
  6. 仅供参考,odt / html / rtf / pdf导入不起作用。但是,docx导入有效。

    请尽快解决问题。

    感谢您的支持。

1 个答案:

答案 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];

    }

}