iPhone DropBox API: как загрузить файл? - PullRequest
7 голосов
/ 16 апреля 2011

Очень простой вопрос, касающийся интеграции DropBox в приложение для iPhone.

Я следил за настройкой DropBoxSDK, и все работает отлично.Я могу войти в свой аккаунт и связать его.Поэтому я все настроил правильно.

Теперь я хотел бы использовать его, чтобы просто загрузить файл из DropBox и сохранить его снова.Учтите, что вы хотите синхронизировать только ОДИН ФАЙЛ (для простоты), который называется «example.txt» и находится в папке «Example» в моем DropBox.Тот же файл «example.txt» сохраняется локально на iPhone в каталоге «Мои документы» моего приложения.

Файл readme для DropBox предлагает смутно следующий код, который я считаю очень загадочным и не могу понять, как загрузитьили сохраните файл:

2. Make an request on the rest client:

   [[self restClient] loadMetadata:@"/"];

3. Implement the DBRestClientDelegate methods needed to get the results of the
   particular call you made:

   - (void)restClient:(DBRestClient*)client 
       loadedMetadata:(DBMetadata*)metadata {

       NSLog(@"Loaded metadata!");
   }

   - (void)restClient:(DBRestClient*)client 
       metadataUnchangedAtPath:(NSString*)path {

       NSLog(@"Metadata unchanged!");
   }

   - (void)restClient:(DBRestClient*)client 
       loadMetadataFailedWithError:(NSError*)error {

       NSLog(@"Error loading metadata: %@", error);
   }

Итак, мой (надеюсь) простой вопрос, как я могу:

  • проверить, есть ли папка с примером в моем выпадающем списке
  • если нет, создайте его и сохраните файл example.txt из документов приложения в папку этого примера.
  • загрузите файл example.txt
  • после завершения работы программы: сохраните файл example.txt в DropBox

Я не могу найти ответ на эти довольно простые шаги в документации DropBox на веб-сайте.Пример, который они привели, я нахожу слишком запутанным ... тем более что речь идет только о загрузке файлов, а не о сохранении их, насколько я вижу.

Буду признателен за любую помощь или предложения о том, какидти об этом.

Ответы [ 2 ]

15 голосов
/ 16 апреля 2011

Хорошо, я нашел этот метод для сохранения моего файла example.txt:

-(void) DBupload:(id)sender
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents directory
    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"Example.txt"];

    [self.restClient uploadFile:@"NoteBook.txt" toPath:@"/example" fromPath:filePath];
}

Оказывается, не нужно создавать папку, Dropbox сделает это автоматически для вас, если она не существует.

Это для загрузки в том же файле dropbox:

-(void) DBdownload:(id)sender
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents directory
    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"Example.txt"];
    NSError *error;

    [self.restClient loadFile:@"/example/Example.txt" intoPath:filePath];

    if (filePath) { // check if file exists - if so load it:
        NSString *tempTextOut = [NSString stringWithContentsOfFile:filePath
                                                          encoding:NSUTF8StringEncoding
                                                             error:&error];
    }
}

Надеюсь, это поможет, если вы боролись с подобным вопросом.

2 голосов
/ 17 апреля 2011

В функцию DBdownload вы можете пропустить проверку, реализовав метод DBRestClientDelegate loadFile и loadFileFailedWithError

...