2016-03-31 4 views
0

Ich speichere eine example.txt Datei in meiner Dropbox. Und wenn ich etwas Text in dieser txt-Datei hinzugefügt habe, möchte ich die vorherige Datei aus Dropbox löschen und eine neue Datei als denselben example.txt-Namen hinzufügen. Aber es passiert nicht.Wie kann ich vorherige Datei löschen und eine neue Datei in Dropbox in iOS hinzufügen?

Dies ist der Upload-Datei Code:

NSString *text = @"Hello Word !!!!"; 
NSString *filename = @"working-draft.txt"; 
NSString *localDir = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; 
NSString *localPath = [localDir stringByAppendingPathComponent:filename]; 
[text writeToFile:localPath atomically:YES encoding:NSUTF8StringEncoding error:nil]; 


[self.restClient deletePath:@"/working-draft.txt"]; // Here I am deleting Previous txt file and adding new file 

// Upload file to Dropbox 
NSString *destDir = @"/"; 
[self.restClient uploadFile:filename toPath:destDir withParentRev:nil fromPath:localPath]; 

Delegate Methode:

#pragma mark Delegate method for Uploading file in dropbox -------- 

- (void)restClient:(DBRestClient *)client uploadedFile:(NSString *)destPath 
      from:(NSString *)srcPath metadata:(DBMetadata *)metadata { 
NSLog(@"File uploaded successfully to path: %@", metadata.path); 
self.activityIndicate.hidden = YES; 

} 
- (void)restClient:(DBRestClient *)client uploadFileFailedWithError:(NSError *)error { 
NSLog(@"File upload failed with error: %@", error); 
} 

Während Hochladen ich vorherige txt-Datei und das Hochladen einer neuen Datei gelöscht. Aber manchmal zuerst seine zweite Datei mit dem Namen example(2).txt und nach dem Hinzufügen hinzufügen, löscht die vorherige Datei.

Wie kann ich das beheben? Bitte, jeder kann mir helfen. ?

Antwort

0

Zwei Dinge:

  1. Sie warten nicht wirklich für das Löschen vor dem Hochladen zu beenden. Sie sollten warten, bis Ihr Delegierter deletedPath aufgerufen wird (das bedeutet, dass der Löschvorgang abgeschlossen ist), bevor Sie versuchen, die Datei erneut hinzuzufügen.
  2. Wenn Sie nur die Datei ersetzen möchten, müssen Sie sie nicht zuerst löschen. Sie können einfach den Parameter overwrite verwenden.

Unterstützung für overwrite ist nicht groß in dem v1 iOS SDK, so dass ich glaube, dass Sie die Überlastung von uploadFile verwenden müssen, die einen params Wörterbuch nimmt, etwa so:

NSMutableDictionary *params = 
    [NSMutableDictionary dictionaryWithObjects:@"true" 
             forKey:@"overwrite"]; 
[self.restClient uploadFile:filename 
        toPath:destDir 
        fromPath:localPath 
        params:params]; 
+0

params: params nehmen nicht. Dieser Parameter ist in Restclient-Delegate-Methode nicht verfügbar? –

+0

@SRNayak Oh, Entschuldigung. Es sieht so aus, als wäre diese Methode nicht über 'DBRestClient.h' verfügbar. Vielleicht nur eine Deklaration hinzufügen? Besser noch, verfolgen Sie die 'rev' der Datei und übergeben Sie sie mit' 'withParentRev'' mit der Methode, die Sie bereits verwenden. Dies ist eine sicherere Möglichkeit, nur die Version der Datei zu überschreiben, die Sie verwenden wollten. – smarx

+0

Kannst du eine Prise Code nach meinem Code geben? :) –

0

Für Swift 3.

Wenn Sie möchten, um die Datei zu überschreiben:

client.files.upload(path: filePath, mode: .overwrite, autorename: false, clientModified: nil, mute: true, input: data).response(completionHandler: { (response, error) in 
    if let metadata = response { 
     aPrint("Uploaded file name: \(metadata.name)"); aPrint("Uploaded file revision: \(metadata.rev)") 
     completionHandler(metadata, error) 

    } else { 
     completionHandler(nil, error) 
    } 

    }) 

Wenn Sie möchten, lösche die Datei:

if let client = DropboxClientsManager.authorizedClient { 
    client.files.delete(path: filePath).response(completionHandler: { (response, error) in 
    if let metadata = response { 
     aPrint("Uploaded file name: \(metadata.name)") 
     completionHandler(metadata, error) 
    } else { 
     completionHandler(nil, error) 
    } 
    }) 
} 
+0

Kannst du den Code in objective-c? –

+0

Ich benutze Obj-C nicht mehr, also habe ich es nicht :( –

Verwandte Themen