2015-04-23 9 views
6

Ho un video che viene catturato con AVCapture, e sto cercando di caricare con AFNetworking con Swift.Caricamento di un file da AVCapture utilizzando AFNetworking

Codice:

let manager = AFHTTPRequestOperationManager() 
let url = "http://localhost/test/upload.php" 
var fileURL = NSURL.fileURLWithPath(string: ViewControllerVideoPath) 
var params = [ 
    "familyId":locationd, 
    "contentBody" : "Some body content for the test application", 
    "name" : "the name/title", 
    "typeOfContent":"photo" 
] 

manager.POST(url, parameters: params, 
    constructingBodyWithBlock: { (data: AFMultipartFormData!) in 
     println("") 
     var res = data.appendPartWithFileURL(fileURL, name: "fileToUpload", error: nil) 
     println("was file added properly to the body? \(res)") 
    }, 
    success: { (operation: AFHTTPRequestOperation!, responseObject: AnyObject!) in 
     println("Yes thies was a success") 
    }, 
    failure: { (operation: AFHTTPRequestOperation!, error: NSError!) in 
     println("We got an error here.. \(error.localizedDescription)") 
}) 

Il codice di cui sopra non riesce, io continuo a ricevere

was file added properly to the body? false" 

nota che ViewControllerVideoPath è una stringa contenente la posizione del video che è:

"/private/var/mobile/Containers/Data/Application/1110EE7A-7572-4092-8045-6EEE1B62949/tmp/movie.mov" 

utilizzando println() .... Il codice sopra funziona quando sto caricando un af ile inclusi nella directory e utilizzando:

var fileURL = NSURL.fileURLWithPath(NSBundle.mainBundle().pathForResource("test_1", ofType: "mov")!) 

Quindi sicuramente il mio codice PHP va bene, e il problema si trova con il caricamento di quel file salvato sul dispositivo, che cosa sto facendo male qui?

+0

Come funziona esattamente il codice di caricamento? Non sta caricando assolutamente nulla o in qualche altro modo (crash, ecc.)? Hai eseguito un controllo con NSFileManager per confermare che il file esiste prima di iniziare il caricamento? – Eugene

+0

@Eugene il file viene riprodotto attraverso un lettore con lo stesso percorso ... Continuo a ricevere da php, "file aggiunto al corpo falso" .. – MasterWizard

+0

Sembra che questa risposta di errore dal tuo backend venga restituita manualmente. Il tuo back-end riceve il file? Se sì, hai provato a scrivere il file da qualche parte nel disco rigido di back-end per vedere se il file è codificato correttamente e può essere letto dal tuo lettore multimediale? – Eugene

risposta

2

I commenti non consentono una spiegazione completa, quindi ecco maggiori informazioni;

NSBundle.mainBundle() fa riferimento a un percorso nel file bundle Il percorso nel simulatore è diverso da quello dell'applicazione ... non è ciò che si desidera. Esistono numerose "cartelle" alle quali è possibile accedere in base alle proprie esigenze (private o condivisibili/file che possono essere copiati nel cloud). NSPathUtils.h fornisce una ripartizione dei percorsi disponibili. In linea con le convenzioni usate dalla maggior parte, dovresti probabilmente creare un percorso privato sotto il percorso dell'applicazione facendo qualcosa di simile;

- (NSURL *) applicationPrivateDocumentsDirectory{ 
    NSURL *pathURL = [[self applicationLibraryDirecory]URLByAppendingPathComponent:@"MyApplicationName"]; 
    return pathURL; 

}

- (NSURL *) applicationLibraryDirecory{ 

    return [[[NSFileManager defaultManager] URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask] lastObject]; 

}

È possibile verificare se esiste, se non, crearlo ... quindi memorizzare i file video in questo percorso, e passare questo al tuo AVCapture come posizione in cui archiviare il file.

+0

Ovviamente questo è Objective-c ... ma sono sicuro che puoi capire l'equivalente di Swift – MDB983

1

Ecco il codice che può eseguire la seguente funzionalità in rapido.

1: Controllare l'elenco delle condizioni meteo o no. se non esiste, creare la directory (Directory ha fornito il nome dell'applicazione) nella cartella della directory del documento.

2: Ora abbiamo la directory delle applicazioni. quindi tutti i file che dall'applicazione scriveranno/leggeranno in/da questa directory.

let file = "file.txt" 
    let directoryName = “XYZ” // Here “XYZ” is project name. 
    var error : NSError? 
    let filemgr = NSFileManager.defaultManager() 

    let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, 
       .UserDomainMask, true) 

    let documentsDirectory = dirPaths[0] as! String 

    var dataPath = documentsDirectory.stringByAppendingPathComponent(directoryName) 

    if !NSFileManager.defaultManager().fileExistsAtPath(dataPath) { 
     NSFileManager.defaultManager().createDirectoryAtPath(dataPath, withIntermediateDirectories: false, attributes: nil, error: &error) 
    } else { 
     println("not creted or exist") 
    } 

Ora abbiamo solo la directory per scrivere/leggere i dati dalla directory.

come scrivere file nella directory documento rapida

let filePath = dataPath.stringByAppendingPathComponent(file); 
    let text = "some text" 

//writing 
text.writeToFile(filePath, atomically: false, encoding: NSUTF8StringEncoding, error: nil); 

Come leggere file dalla cartella dei documenti.

let filePath = dataPath.stringByAppendingPathComponent(file); 
// Read file 
let text2 = String(contentsOfFile: filePath, encoding: NSUTF8StringEncoding, error: nil) 

uscita: enter image description here

Spero che questo vi aiuterà.

Problemi correlati