Rubymotion: télécharger et extraire le fichier zip dans iOS
-
12-12-2019 - |
Question
J'ai besoin de télécharger et de décompresser un fichier à Rubymotion.J'ai essayé de chercher des exemples mais je n'ai trouvé aucun de ce processus.
J'ai une variable (@file) qui correspond à toutes les données de la demande.J'ai besoin d'écrire ces données dans un fichier, puis de décompresser, de persister les données non compressées et de supprimer le fichier compressé TMP.
Voici ce que j'ai jusqu'à présent:
class LoadResourcesViewController < UIViewController
def viewDidAppear(animated)
@loading_bar = retrieve_subview_with_tag(self, 1)
req=NSURLRequest.requestWithURL(NSURL.URLWithString("#{someurl}"))
@connection = NSURLConnection.alloc.initWithRequest req, delegate: self, startImmediately: true
end
def connection(connection, didFailWithError:error)
p error
end
def connection(connection, didReceiveResponse:response)
@file = NSMutableData.data
@response = response
@download_size = response.expectedContentLength
end
def connection(connection, didReceiveData:data)
@file.appendData data
@loading_bar.setProgress(@file.length.to_f/@download_size.to_f)
end
def connectionDidFinishLoading(connection)
#create tmp file
#uncompress .tar, .tar.gz or .zip
#presist uncompresssed files and delete original tmp file
puts @file.inspect
@connection.release
solutionStoryboard = UIStoryboard.storyboardWithName("Master", bundle:nil)
myVC = solutionStoryboard.instantiateViewControllerWithIdentifier("Main3")
self.presentModalViewController(myVC, animated:true)
end
end
Toute aide ou exemples serait génial!
La solution
J'ai donc résolu ceci pour décompresser et défaire.
Unzip:
#UNZIP given you have a var data that contains the zipped up data.
tmpFilePath = "#{NSTemporaryDirectory()}temp.zip" #Get a temp dir and suggest the filename temp.zip
@fileManager = NSFileManager.defaultManager() #Get a filemanager instance
@fileManager.createFileAtPath(tmpFilePath, contents: data, attributes:nil) #Create the file in a temp directory with the data from the "data" var.
destinationPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, true ).objectAtIndex(0) //get the target home for the unzipped files. This MUST be within your domain in order to persist.
SSZipArchive.unzipFileAtPath(tmpFilePath, toDestination: destinationPath) #Use the SSZipArchive to unzip the file.
@fileManager.removeItemAtPath(tmpFilePath, error: nil) #Cleanup the tmp dir/files
Gardez à l'esprit que vous devez inclure le SSZIPARCHIVE LIB.J'ai utilisé l'Obj-C lib au lieu d'un cocoapod.Pour ce faire, ajoutez les lignes suivantes dans votre fichier de rakefile (suppose que vous mettez les fichiers Obj-C dans le dossier Vendor / Ssziparchive):
app.libs += ['/usr/lib/libz.dylib']
app.vendor_project('vendor/SSZipArchive', :static)
to end:
dir = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, true) #get target dir for untar'd files
error_ptr = Pointer.new(:object)
NSFileManager.defaultManager.createFilesAndDirectoriesAtPath(dir[0], withTarData: data, error: error_ptr) #Create and untar te data (assumes you have collected some tar'd data in the data var)
Dans ce cas, vous aurez besoin de la lumière de la LIB (https://github.com/mhausherr/light-untar-for-ios/).Pour inclure cette liberme dans votre rakeFile (suppose que les fichiers sont en fournisseur / untar):
app.vendor_project('vendor', :static, :headers_dir=>"unTar")