如何使用 Alamofire.upload 函数上传带有一些参数的图片或 wav 文件

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案1】:

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

多部分表单数据

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

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

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

文件上传

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

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

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

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

【讨论】:

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

以上是关于如何使用 Alamofire.upload 函数上传带有一些参数的图片或 wav 文件的主要内容,如果未能解决你的问题,请参考以下文章

Alamofire 5 没有名为 upload 的成员

Swift - “Alamofire.upload” -> “AF.upload” 上传功能问题

如何使用参数 swift 3.0 Alamofire 4.0 调用邮政服务?

Alamofire,使用参数中的结构上传 MultipartFormData

Alamofire(Swift 3):对成员“上传(..”)的模糊引用

如何在 Alamofire 4 中进行多部分表单数据上传?