6

我有一个使用 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代码很好,问题在于上传保存在设备上的文件,我在这里做错了什么?

4

2 回答 2

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 作为存储文件的位置。

于 2015-04-27T21:15:13.663 回答
1

以下是可以在 swift 中执行以下功能的代码。

1:检查天气目录是否存在。如果不存在,则在文档目录文件夹中创建目录(目录已给出应用程序名称)。

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)

输出 : 在此处输入图像描述

希望这会帮助你。

于 2015-05-01T06:29:48.273 回答