2012-12-13 12 views
6

嗨谷歌雲端硬盤API支持人員,谷歌驅動器(文件)導入錯誤:在更新文件未顯示圖像文件

在過去的幾天裏,我們曾與谷歌雲端硬盤嚴重的麻煩。

我們無法再用圖像更新文檔文檔。當我們的iPhone應用程序發送圖片更新文檔文檔的請求時,服務器返回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. 下載最新的 「谷歌API客戶端庫的Objective-C」。
  2. 在XCode中打開DriveSample項目。
  3. 用代碼替換「 - (void)duplicateSelectedFile」方法。
  4. 編譯並執行修改後的示例應用程序「獲取文件列表」,選擇包含圖像的文檔文件,然後點擊「重複」。
  5. 所選文件應該被覆蓋相同的內容。但是,內部的圖像全部丟失(在無處不在的等待上傳狀態)。

僅供參考,odt/html/rtf/pdf導入不起作用。但是,docx導入工作。

請儘快解決問題。

感謝您的支持。

回答

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

    } 

}