Server File Browser mit NSURLSESSION

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Aufgrund der Corona-Krise: Die Veröffentlichung von Stellenangeboten und -gesuchen ist bis 31.12.2020 kostenfrei. Das beinhaltet auch Angebote und Gesuche von und für Freischaffende und Selbstständige.

  • Server File Browser mit NSURLSESSION

    Hallo, ich habe einen NAS Server zuhause und will mir über NSURLSESSIONDATATASK die Order und Elemente des aktuellen Ordners anzeigen lassen.

    das hier ist meine Delegate Methode:

    Quellcode

    1. -(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data{
    2. NSLog(@"didReceiveData");
    3. if (data) {
    4. NSDictionary *responseDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
    5. //IF JSON
    6. if (responseDic) {
    7. NSLog(@"JSON RESPONSEDIC: %@", responseDic);
    8. }
    9. else{
    10. NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    11. NSArray *array = [responseString componentsSeparatedByString:@"\n"];
    Alles anzeigen

    Es funktioniert auch, leider kann ich aus dem DATA-OBJECT das mir zurückgeliefert wird, kein Dictionary machen. Ich kann nur den String mit Data initialisieren, was dann im Log so ausschaut


    Quellcode

    1. drwxrwsrwx 12 501 0 4096 Jun 20 02:16 .
    2. 2017-06-20 12:21:24.917893 DownloadApp[2208:561373] drwxrwxrwx 3 0 0 0 Jun 20 10:21 ..
    3. 2017-06-20 12:21:24.917943 DownloadApp[2208:561373] -rwxrwxrwx 1 504 0 28676 Jun 20 01:24 .DS_Store
    4. 2017-06-20 12:21:24.918006 DownloadApp[2208:561373] -rwxrwxrwx 1 504 0 0 Jan 22 21:56 ._272934152_1392667558_463188958.tmp
    5. 2017-06-20 12:21:24.918057 DownloadApp[2208:561373] -rwxrwxrwx 1 504 0 512 Jan 22 21:57 ._272934152_1392667558_463188958.tmp-journal
    6. 2017-06-20 12:21:24.918108 DownloadApp[2208:561373] -rwxrwxrwx 1 504 0 4096 Apr 13 2016 ._Dokus
    7. 2017-06-20 12:21:24.918201 DownloadApp[2208:561373] -rwxrwxrwx 1 504 0 4096 Apr 13 2016 ._Filme
    8. 2017-06-20 12:21:24.918249 DownloadApp[2208:561373] -rwxrwxrwx 1 504 0 4096 Apr 13 2016 ._JDOWNLOADER
    9. 2017-06-20 12:21:24.919817 DownloadApp[2208:561373] -rwxrwxrwx 1 504 0 4096 Apr 13 2016 ._Serien
    10. 2017-06-20 12:21:24.919867 DownloadApp[2208:561373] -rwxrwxrwx 1 504 0 4096 Apr 13 2016 ._Tutorials
    11. 2017-06-20 12:21:24.919950 DownloadApp[2208:561373] drwxrwxrwx 2 0 0 4096 Apr 24 22:17 .thumb
    12. 2017-06-20 12:21:24.920063 DownloadApp[2208:561373] drwxrwxrwx 12 504 0 4096 Jan 28 11:52 Bilder
    13. 2017-06-20 12:21:24.920111 DownloadApp[2208:561373] drwxrwxrwx 15 504 0 4096 Apr 2 23:45 Dokumente
    14. 2017-06-20 12:21:24.920159 DownloadApp[2208:561373] drwxrwxrwx 2 504 0 4096 Nov 4 2016 JDOWNLOADER
    15. 2017-06-20 12:21:24.920207 DownloadApp[2208:561373] drwxrwxrwx 2 504 0 4096 Apr 25 22:18 JTAG 360
    16. 2017-06-20 12:21:24.920450 DownloadApp[2208:561373] drwxrwxrwx 13 504 0 4096 May 23 20:14 Musik
    17. 2017-06-20 12:21:24.920502 DownloadApp[2208:561373] drwxrwsrwx 5 504 0 4096 Apr 24 23:28 Software
    18. 2017-06-20 12:21:24.922082 DownloadApp[2208:561373] drwxrwxrwx 8 504 0 4096 Jun 17 19:56 Video
    19. 2017-06-20 12:21:24.922133 DownloadApp[2208:561373] drwxrwxrwx 5 504 0 4096 Apr 24 22:17 Xcode
    20. 2017-06-20 12:21:24.922180 DownloadApp[2208:561373] drwxr-sr-x 2 0 0 4096 Apr 24 23:36 recycle
    Alles anzeigen
    Am Ende jeder Zeile habe ich den Ordner - oder Dateinamen, den ich brauchen würde.

    ich arbeite bis jetzt mit SUBSTRINGFROMINDEX um an die einzelnen Ordner - und Dateinamen zu kommen.

    da komme ich aber immer mehr in die Probleme rein, weil ich das suffix der strings abfrage um passende icons für die TABLEVIEWCELLS zu vergeben, wie Ordner, audiodatei, Videodateien...

    ich habe jetzt z.B einen Ordnernamen, der heist: "Projekte bis 14.07.15" - das suffix ist dann natürlich ".15" und dass will ich vermeiden.

    hat vielleicht jemand eine Idee wie man das besser machen könnte??? danke im vorraus.
  • Ich nutze für die Anfrage einfach den DataTask von der URLSession, das ist die Methode dazu:

    Quellcode

    1. //DATA TASK
    2. -(void)dataTaskWithURLString: (NSString *) urlString{
    3. //LOADING INDICATOR
    4. [self.loadingIndicator startAnimating];
    5. self.loadingIndicator.alpha = 1;
    6. [self.urlSession invalidateAndCancel];
    7. NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
    8. self.urlSession = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];
    9. NSURLSessionDataTask *dataTask = [self.urlSession dataTaskWithURL:[NSURL URLWithString:dirString]];
    10. [dataTask resume];
    11. }
    Alles anzeigen


    ich frage direkt über den ftp link an, bei dem der Benutzername, Passwort und Port drin steht.

    das was oben im Log steht ist dann das, was ich zurück bekomme. ich habe den ResponseString aufgeteilt als einzelne Strings nach jedem "\n" und der log ist dann das Array.
  • Versuch mal die geladenen Daten mit CFFTPCreateParsedResourceListing() zu bearbeiten. Früher™ hat die Funktion Text in Mairoman erwartet, keine Ahnung ob das immer noch so ist.
    Der Code ist zwar schon ein paar Jahre alt, sollte aber noch funktionieren.

    Quellcode

    1. + (NSArray *) parseDirectoryData:(NSData *)data {
    2. NSMutableArray * array = [[NSMutableArray alloc] init];
    3. UInt8 * buffer = (UInt8 *)data.bytes;
    4. CFIndex bufferSize = data.length;
    5. CFIndex bytesConsumed;
    6. do {
    7. CFDictionaryRef parsedDict;
    8. bytesConsumed = CFFTPCreateParsedResourceListing(NULL, buffer, bufferSize, &parsedDict);
    9. if ( bytesConsumed > 0 ) {
    10. if ( parsedDict != NULL ) {
    11. [array addObject:(__bridge id)(parsedDict)];
    12. CFRelease(parsedDict);
    13. }
    14. bufferSize -= bytesConsumed;
    15. buffer += bytesConsumed;
    16. }
    17. else if ( bytesConsumed == -1 ) {
    18. NSLog(@"%s Could not parse directory data!", __PRETTY_FUNCTION__);
    19. return nil;
    20. }
    21. } while ( bytesConsumed > 0 );
    22. return array;
    23. }
    Alles anzeigen
    Man macht einfach solange irgendwelche Dinge, bis man tot ist.
    Und dann bekommen die anderen Kuchen.