无法从服务器下载附件作为响应
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)
我在 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)