2016-10-25 3 views
0

Je tente de télécharger un document Word à partir du stockage Firebase. Sur le simulateur tout fonctionne comme prévu. Pourtant, sur mon appareil, je reçois l'erreur suivante:Téléchargement de fichiers de stockage Firebase Périphérique Problème

Optional(Error Domain=FIRStorageErrorDomain Code=-13000 "An unknown error occurred, please check the server response." UserInfo={object=26 October 2016.docx, bucket=app.appspot.com, NSLocalizedDescription=An unknown error occurred, please check the server response., ResponseErrorDomain=NSCocoaErrorDomain, NSFilePath=/tmp/bulletin, NSUnderlyingError=0x1702590b0 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}, ResponseErrorCode=513})

Autres messages que je cherchais à ne semblent pas me donner une réponse de travail, et tout ce que je sais est qu'il ya un problème avec les permissions de fichiers, même bien que j'utilise le répertoire recommandé (tmp).

Ceci est le code pour télécharger le fichier

let Ref_Bulletin = Bulletin.referenceForURL("gs:/app.appspot.com/Bulletin/\(Today.stringFromDate(NSDate())).docx") 

    // Create local filesystem URL 
    let localURL: NSURL! = NSURL(string: "file:///tmp/today.docx") 


     // Download to the local filesystem 
     let downloadTask = Ref_Bulletin.writeToFile(localURL) { (URL, error) -> Void in 
      if (error != nil) { 
       print(error.debugDescription) 
       // Uh-oh, an error occurred! 
      } else { 
       print("Working As Expected") 
       self.Web_View.loadRequest(NSURLRequest(URL: localURL)) 
      } 

Alors, quelle est l'origine de ce problème et comment puis-je résoudre ce problème?

Mise à jour:

J'ai donc essayé de créer le répertoire, mais on me dit que je n'ai pas la permission, même si la documentation dit que je peux écrire sur le tmp.

Unable to create directory Error Domain=NSCocoaErrorDomain Code=513 "You don’t have permission to save the file “today.docx” in the folder “h”." UserInfo={NSFilePath=/tmp/h/today.docx, NSUnderlyingError=0x1702498a0 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}}

C'est le code pour la création du répertoire:

do { 
     try NSFileManager.defaultManager().createDirectoryAtPath(localURL.path!, withIntermediateDirectories: true, attributes: nil) 
    } catch let error as NSError { 
     NSLog("Unable to create directory \(error.debugDescription)") 
    } 
+0

Possible duplication de [magasin Firebase: en essayant de stocker au fichier local donne une erreur] (http://stackoverflow.com/questions/37792882/firebase-store-trying-to-store-to-local-file-gives -an-error) –

+0

On dirait que c'est un problème iOS: https://forums.developer.apple.com/thread/19844 –

+0

@MikeMcDonald Mais la réponse que vous m'avez liée à dit que je peux écrire à tmp, j'ai mis à jour mon question. –

Répondre

3

Je suppose que la question est ici que les répertoires tmp et Documents ne vivent pas vraiment à /tmp et /Documents (par exemple, il apparaît comme si /Documents est en fait /User/Documents, qui est en fait /private/var/mobile/Documents, voir: https://www.theiphonewiki.com/wiki/)

Vous aurez voulez vous assurer que vous créez vos URL de fichiers basé au large où le système pense ces répertoires sont, plutôt qu'une chaîne:

NSURL *tmpDirURL = [NSURL fileURLWithPath:NSTemporaryDirectory()]; 
NSURL *fileURL = [[tmpDirURL URLByAppendingPathComponent:@"my_file"] URLByAppendingPathExtension:@"txt"]; 

Ou similaire pour NSDocumentDirectory. Quant à savoir pourquoi cela fonctionne sur le simulateur: je suppose que c'est parce que le bac à sable sur le simulateur ne fonctionne pas de la même manière qu'un vrai périphérique, et que /tmp est apparemment un emplacement valide auquel vous pouvez écrire (mais probablement pas celui que vous voulez à écrire deux, comme en témoigne iOS en jetant un ajustement hissy lorsque vous essayez de le faire sur un appareil réel).

+0

Merci Mike, ça marche maintenant. Cependant, je ne pense pas que cela ait été mentionné dans les autres questions. –