2012-12-13 6 views
6

Hi Dysku Google personnel pomocy API,Dysk Google (Dokumenty) Błąd importu: Obrazy nie pokazane w Dokumentach zaktualizowanych plików

W ciągu ostatnich kilku dni, poznaliśmy poważne kłopoty z Dysku Google.

Nie możemy już aktualizować dokumentu Dokumentów z obrazami. Gdy nasza aplikacja na iPhone'a wyśle ​​prośbę o aktualizację dokumentu w Dokumentach za pomocą obrazów, serwer zwróci OK, ale obrazy znajdujące się w środku nigdy nie zostaną przesłane.

Kod powielania problemu znajduje się tutaj.

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

Dla najprostszy reprodukcji

  1. Pobierz najnowszy "Google API Client Library dla Objective-C".
  2. Otwórz projekt DriveSample w XCode.
  3. Zamień metodę "- (void) duplicateSelectedFile" na kod.
  4. Skompiluj i uruchom zmodyfikowaną aplikację przykładową, "Pobierz listę plików", wybierz plik dokumentów z obrazami, a następnie wybierz "Duplikuj".
  5. Wybrany plik powinien zostać nadpisany tą samą zawartością. Jednak obrazy wewnątrz są zagubione (na niekończącym się stanie oczekiwania na przesłanie).

Import FYI, odt/html/rtf/pdf nie działa. Jednak import docx działa.

Napraw ten problem tak szybko, jak to możliwe.

Dziękujemy za wsparcie.

Odpowiedz

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

    } 

} 
Powiązane problemy