ios - How to get NSURL from a Dropbox file? -
i'd use qlpreviewcontroller preview file stored in dropbox. qlpreviewcontroller takes nsurl, dropbox dbfile returns nsfilehandle * or file content in nsdata * or nsstring *.
what's proper way preview dropbox dbfile in qlpreviewcontroller?
i'm using dropbox sync api.
here's snippet copies dropbox file temp dir, "converting" dbfileinfo item nsurl.
this method:
- assumes have self.file nsarray containing dbfileinfo items (see:
[[dbfilesystem sharedfilesystem] listfolder:[dbpath root] error:&err];) - opens , reads info item nsdata
- writes tempurl same filename
- and returns tempurl
the snippet not perfect, can used is. however, user info hud progress spinner should used (it may take while download file).
- (nsurl*)urlofdropboxitematindex:(nsuinteger)index { if(index < self.files.count) { //[self presentprocessingfilehud]; __block nsurl *fileurl; dispatch_sync(dispatch_get_global_queue(dispatch_queue_priority_high, 0), ^{ nserror *err; dbfileinfo *fileinfo = self.files[index]; nsstring *tempdir = nstemporarydirectory(); nsurl *tempurl = [nsurl fileurlwithpath:[tempdir stringbyappendingpathcomponent:@"dropbox-tmp"]]; // create tempurl nsfilemanager *filemanager = [nsfilemanager defaultmanager]; if(![filemanager fileexistsatpath:tempurl.path]) { [filemanager createdirectoryaturl:tempurl withintermediatedirectories:yes attributes:nil error:&err]; if(err) { nsstring *errmsg = [nsstring stringwithformat:@"error creating temp directory @ %@", tempurl.path]; nslog(@"%@",errmsg); [self presenterrorhudwithmessage:errmsg]; } } fileurl = [tempurl urlbyappendingpathcomponent:fileinfo.path.name]; // read dropbox file dbfile *file = [[dbfilesystem sharedfilesystem] openfile:fileinfo.path error:&err]; if(file && !err) { nsdata *filedata = [file readdata:&err]; if(err) { nslog(@"error reading data file %@ (%@)", fileurl.path, err); } [filedata writetourl:fileurl atomically:yes]; [file close]; //[self dismisshud]; } else { nsstring *errstr = [nsstring stringwithformat:@"error accessing dropbox file %@ (%@)", fileurl.path, err]; nslog(@"%@", errstr); //[self presenterrorhudwithmessage:errstr]; fileurl = nil; } }); return fileurl; } else { return nil; } }
Comments
Post a Comment