使用URLSession和URLRequest为uploadTask添加内容配置参数

时间:2019-02-06 08:07:56

标签: nsurlsession nsurlrequest content-disposition urlsession urlrequest

我正在使用URLSession'来自文件的uploadTask'

func uploadTask(with request: URLRequest, fromFile fileURL: URL) -> URLSessionUploadTask

几乎所有东西都可以正常工作,但是现在我们的服务器需要额外的参数“ uploadKey”作为内容处置与fileName一起传递。

这可以通过生成多部分请求来完成,并添加内容处置,就像我们通常所做的那样。

我想在使用“来自文件的uploadTask”时添加它以避免内存压力。请提出建议。

1 个答案:

答案 0 :(得分:0)

通过阅读问题,我怀疑您是在误解上载任务的作用(不幸的是,Apple的文档在这方面需要一些重大改进,这无济于事)。这些任务不会以与您选择上传表单中的文件时Web浏览器相同的方式上传文件。而是将文件用作上传请求的正文。我认为他们默认不提供基于文件名的合理的Content-Type,尽管我不确定,但他们以表单编码发送数据。

因此,假设我已完全理解该问题,则可以选择以下两种方式之一:

  1. 继续使用分段编码。 (可选)将多部分主体写入文件中,而不是将其保留在内存中,并使用上载任务从该文件(而不是从NSData对象)提供主体。
  2. 以整个上传正文的形式上传您要发送的未编码文件,并以URL本身的GET参数的形式提供您需要提供的任何其他参数。
  3. 使用其他一些编码,例如JSON或协议缓冲区。

无论哪种方式,服务器代码都将确定支持哪种方法。如果可以修改服务器代码,那么我建议第二种方法。它比第一种方法更有效,比JSON更有效,并且比其他任何一种方法都易于实现。