【问题标题】:how to upload a picture or a wav file with some parameters using Alamofire.upload function如何使用 Alamofire.upload 函数上传带有一些参数的图片或 wav 文件
【发布时间】:2015-03-24 03:34:43
【问题描述】:

我想将一些文件上传到服务器,但它需要一个令牌才能与文件一起发布。我登录时获得了令牌,那么我如何发布到服务器?我可以这样写代码吗?

var par=[
           "token":"xxxxxxxxxx",
           "file":"filename.file"
]
Alamofire.upload(.POST, "http://www.xxxxx.xxx", parameters: par)

【问题讨论】:

    标签: swift post alamofire


    【解决方案1】:

    根据您的服务器实现,当前版本的 Alamofire 很可能不支持此功能。

    多部分表单数据

    您的服务器很可能希望数据采用multipart/form-data 编码。目前,Alamofire 不支持多部分表单数据。您需要根据RFC-2388RFC-2045 自行对数据进行编码。

    如果最终出现这种情况,您可以实现自己的规范版本,也可以使用AFNetworking。如果是这种情况,我现在鼓励你使用 AFNetworking。如果您决定真的想自己实现它,这里有一个 thread(@rainypixels 提供)帮助您开始。

    您需要小心使用此选项,因为它是一种内存解决方案。请勿尝试以这种方式上传视频或大量图片,否则您的应用很快就会内存不足。

    文件上传

    如果服务器不期望multipart/form-data编码,那么可以使用Alamofire上传方式。

    public func upload(URLRequest: URLRequestConvertible, file: NSURL) -> Request
    

    您可以创建一个NSURLRequest,并将令牌作为参数附加,然后将fileURL 传递给Alamofire 进行上传。

    总之,我很确定第一种方法是您的服务器所需要的。无论哪种方式,希望这可以帮助您朝着正确的方向前进。

    【讨论】:

    • 您是否有理由不建议将自定义多部分实现与 Alamofire.upload 结合使用,@cnoon?例如,像这样的东西——stackoverflow.com/questions/26121827/…(也有一些更强大的多部分编码实现)。这将是一个相当硬编码的解决方案,但只需 15-20 行代码即可完成工作。只是想知道我是否遗漏了什么。
    • 你的观点非常好。我已经使用您的链接和有关内存使用的警告相应地更新了我的答案。我不鼓励人们尝试自己构建它的主要原因是,有许多不同的事情需要考虑,它们会咬你一口。我已经构建了一个强大的解决方案,我计划很快在此处加入 Alamofire PR。
    • 有道理。是的,我非常担心自己滚动。我一直在关注 github 上的线程,所以我认为有人会请求此功能只是时间问题。与此同时,我有一个简单的占位符来为我的应用程序完成这项工作,这仍然是一种生产方式。每当您的 PR 被合并时,撕掉我的代码会更容易。很高兴听到你已经接受了,顺便说一句。我会继续关注,感谢您的贡献! :)
    • 嗨@Learningpro,如果这个答案足够,您可以投票并标记吗?
    猜你喜欢
    • 1970-01-01
    • 2019-08-24
    • 2019-03-30
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多