我正在使用URLSession‘uploadTask from file’
func uploadTask(with request: URLRequest, fromFile fileURL: URL) -> URLSessionUploadTask
几乎一切都很好,但现在我们的服务器需要一个额外的参数"uploadKey",作为内容处置与fileName一起传递。
这可以通过生成包含内容处置的多部分请求来完成,就像我们通常做的那样
我想在使用"uploadTask from file"时添加它,以避免内存压力。请建议如何做。
从阅读这个问题中,我怀疑你在微妙地误解上传任务的作用(不幸的是,苹果的文档需要在这方面进行一些重大改进,这对事情没有帮助)。如果您在上传表单中选择文件,这些任务不会像web浏览器那样上传文件。相反,它们会将文件用作上传请求的正文。我认为他们默认根据文件名提供一个合理的内容类型,尽管我不确定,但他们确实而不是以表单编码发送数据。
所以假设我完全理解这个问题,你的选择是:
- 继续使用多部分编码。(可选)将多部分正文写入文件,而不是将其保存在内存中,并使用上载任务从该文件而不是从NSData对象提供正文
- 将您试图发送的未编码文件作为上传主体的整体进行上传,并在URL中以GET参数的形式提供您需要提供的任何其他参数
- 使用其他一些编码,如JSON或协议缓冲区
无论哪种方式,服务器代码都将确定支持这些方法中的哪种。如果您可以修改服务器代码,那么我推荐第二种方法。它比第一种方法效率略高,比JSON效率高得多,并且比任何其他方法都更容易实现。