使用AFNetworking从AVCapture上传文件

时间:2015-04-23 12:22:53

标签: ios swift afnetworking avcam

我有一个用AVCapture捕获的视频,我尝试使用Swift上传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() ....当我上传目录中包含的文件并使用以下代码时,上面的代码有效:

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

所以我的PHP代码确实很好,问题在于上传保存在设备上的文件,我在这里做错了什么?

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分: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")
    }

现在我们有了Directory,因此只需要从目录中写入/读取数据。

如何在swift文档目录中写入文件

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

希望这会对你有所帮助。