【问题标题】:Cannot download attachment in response from server无法从服务器下载附件响应
【发布时间】:2015-01-17 05:03:26
【问题描述】:

我在 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可选() P>

错误为零

这是我用来在我的电脑中保存附件的代码:

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)

我是否使用了错误的方法来保存附件?

【问题讨论】:

    标签: ios swift client-server httpresponse alamofire


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      您可以使用 url 代替路径

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

      【讨论】:

      • 非常感谢^^!我是初学者,你给我一个新的解决方案!
      猜你喜欢
      • 2021-02-04
      • 2015-03-21
      • 2015-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-13
      • 1970-01-01
      相关资源
      最近更新 更多