2015-04-23 4 views
6

У меня есть видео, которое записывается с помощью AVCapture, и я пытаюсь загрузить с AFNetworking с помощью Swift.Загрузка файла из AVCapture с использованием AFNetworking

Код:

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)") 
}) 

Код выше не удается, я получаю

was file added properly to the body? false" 

к сведению, что ViewControllerVideoPath это строка, содержащая местоположение видео, которое:

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

используя println() .... Код выше работает, когда я загружаю af Ile включены в каталог и использование:

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

Так определенно мой PHP код нормально, и проблема заключается в загрузке этого файла, сохраненного на устройстве, что я здесь делаю неправильно?

+0

Как именно ваш код загрузки не работает? Загружается ли она абсолютно ничего или каким-то другим способом (авария и т. Д.)? Вы запустили чек с помощью NSFileManager, чтобы подтвердить, что ваш файл существует до начала загрузки? – Eugene

+0

@Eugene файл воспроизводится через игрока с одним и тем же путем ... Я продолжаю получать от php, «файл добавлен в тело false». – MasterWizard

+0

Похоже, что этот ответ об ошибке на вашем сервере возвращается вручную. Получает ли ваш файл файл? Если да, пытались ли вы записать файл где-то на жестком диске, чтобы узнать, правильно ли закодирован файл и может ли его читать ваш медиаплеер? – Eugene

ответ

2

Комментарии не дают полного объяснения, так что вот больше информации;

NSBundle.mainBundle() относится к пути в файле пакета. Путь в симуляторе отличается от пути приложения ... это не то, что вы хотите. Существует ряд «папок», к которым вы можете получить доступ, в зависимости от ваших потребностей (частные или общие/файлы, которые могут быть скопированы в облако). NSPathUtils.h дает разбивку доступных путей. В соответствии с соглашениями, используемыми большинством, вы должны, вероятно, создать частный путь под своим приложением, выполнив что-то вроде:

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

}

- (NSURL *) applicationLibraryDirecory{ 

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

}

Вы можете проверить, если она существует, если нет, то создать его ... затем сохранить видео файлы на этом пути, и передать его на свой AVCapture как место для хранения файла.

+0

Очевидно, что это Objective-c ... но я уверен, что вы можете найти эквивалент Swift – MDB983

1

Вот код, который может выполнять следующие функции в swift.

1: Проверить погоду существует или нет. если не существует, то создайте каталог (Directory дал имя приложения) в папке каталога документа.

2: Теперь у нас есть каталог приложений. поэтому весь файл, который из приложения будет писать/читать в/из этого каталога.

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") 
    } 

Теперь у нас есть Справочник, поэтому нам нужно только писать/читать данные из каталога.

как писать файл в директории документа в быстром

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

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

Как прочитать файл из каталога документов.

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

Выхода: enter image description here

Надеется, что это поможет.

Смежные вопросы