无法从服务器下载附件作为响应

Cannot download attachment in response from server

我在 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 Optional(<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>)

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)

我保存附件的方法不对吗?

看看你的十六进制表示,它看起来像一个 MIDI 文件(它以正确的字节开头)。

问题是:

let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as NSArray
let documentsDirectory = paths.objectAtIndex(0) as NSString

您得到了两次 "first item"。您尝试 return as paths 的那个项目不是路径数组,而是该数组中的第一个字符串(因为您在末尾包含了 [0] )。因此,将其转换为数组的尝试将失败(更不用说稍后从中获取第一项的尝试)。

更简单的是:

let documentsDirectory = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String

您可以使用 url 而不是路径

let documentsUrl =  NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first as NSURL
let fileUrl = documentsUrl.URLByAppendingPathComponent("file.mid")
data.writeToURL(fileUrl, atomically:true)