我在Alamofire中使用post方法成功上传文件,我从服务器获得响应,我可以看到附件隐藏在响应中。当我试图在计算机中保存附件时,它不起作用。这是代码:
let urlRequest = urlRequestWithComponents(URL, parameters: parameters, imageData: fileData!)
Alamofire.upload(urlRequest.0, urlRequest.1)
.progress { (bytesWritten, totalBytesWritten, totalBytesExpectedToWrite) in
println("\(totalBytesWritten) / \(totalBytesExpectedToWrite)")
}
.response { (request, response, data, error) in
println("REQUEST \(request)")
println("RESPONSE \(response)")
println("JSON \(data)")
println("ERROR \(error)")
以下是我从服务器获得的附件中的文件:
"Content-Disposition" = "attachment; filename=20150113171557120001.mid";
数据显示正确的.mid文件
JSON可选(小于4d546864 00000006 00000001 00044d54 726b0000 00540391 35350381 35350291 3a3a0281 3a3a0291 3c3c0381 3c3c0191 3e3e0381 3e3e0691 3e3e0381 3e3e0891 3e3e0381 3e3e0291 3c3c0381 3c3c0191 3d3d0381 3d3d0191 3a3a0381 3a3a0691 3a3a0381 3a3a00ff 2F00&GT)
ERROR nil
以下是我用来在计算机中保存附件的代码:
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as NSArray
let documentsDirectory = paths.objectAtIndex(0) as NSString
let path = documentsDirectory.stringByAppendingPathComponent("file.mid")
(data as NSData).writeToFile(path, atomically:true)
在我添加保存附件的代码后,没有错误或警告,在输出时除了显示如下的线程:
thread1 exc_breakpoint(code = exc_i386_BPT,subcode = 0x0)
我使用错误的方法保存附件吗?
答案 0 :(得分:1)
查看你的十六进制表示,它看起来像一个MIDI文件(它以正确的字节开头)。
问题是:
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as NSArray
let documentsDirectory = paths.objectAtIndex(0) as NSString
您正在获得"第一项"两次。您尝试作为paths
返回的项目不是路径数组,而是该数组中的第一个字符串(因为您在末尾包含了[0]
)。因此,将其作为数组转换的尝试将失败(更不用说稍后从中获取第一个项目的尝试)。
更简单的是:
let documentsDirectory = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
答案 1 :(得分:0)
您可以使用网址而不是路径
let documentsUrl = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first as NSURL
let fileUrl = documentsUrl.URLByAppendingPathComponent("file.mid")
data.writeToURL(fileUrl, atomically:true)