【问题标题】:URLSession dataTask / uploadTask splitting large uploads into multiple requestsURLSession dataTask / uploadTask 将大型上传拆分为多个请求
【发布时间】:2020-12-17 18:05:57
【问题描述】:

希望有人能对这种行为有所了解。

  1. 需要将大文件(例如 50mb+)上传到服务器
  2. 上传被分成多个请求,而不是单个请求中的块(参见查尔斯图片)
  3. 使用其中任何一个都具有相同的行为。
  • URLSession.shared.dataTask
  • URLSession.shared.uploadTask
  • URLSession.shared.uploadTask(withStreamedRequest:)
  • URLSession.shared.dataTaskPublisher
  1. 服务器是 node / express,在本地测试。
// Express server route
app.post('/save', (req, res, next) => {

   // Receives twice for the same upload
}

示例尝试

    var request = URLRequest(url: url)
    request.httpMethod = "POST"
    request.setValue("application/octet-stream", forHTTPHeaderField: "content-type")
    request.setValue("chunked", forHTTPHeaderField: "transfer-encoding")
    request.httpBodyStream = InputStream(data: package)
    let task = self.session.uploadTask(withStreamedRequest: request)
    self.streamingTask = task
    task.resume()

这正常吗?这对我来说似乎很奇怪,并且最终很难将数据放在一起。 我已经设置了各种标头来查看是否是我所缺少的,例如Content-Length,尝试了多种编码(multipart/form、json)。

编辑: 刚刚发现Content-Length是保留头,不能手动设置。但是内容长度没有设置为 httpBody 的大小。

https://developer.apple.com/documentation/foundation/nsurlrequest

【问题讨论】:

    标签: ios node.js swift upload large-files


    【解决方案1】:

    好吧,我怀疑这是一个适合手掌的问题。 url 系统按预期工作,但我是通过触发

    PHImageManager.default().requestImage
    

    如果它返回的第一个块将PHImageResultIsDegradedKey 设置为1,那么对于未来的任何人来说,它的块可能会被多次调用。

    Apple Doc Reference

    这就是导致请求出现就像它们被分开的原因,但实际上它是提交图像的缩略图,然后在加载后提交完整大小。

    鹅被抓住了,但这是一次愚蠢的追逐。希望这对将来的某人有所帮助。

    【讨论】:

      【解决方案2】:

      如果可能,您应该将其保留为一个上传请求,并利用后台会话让操作系统为您处理上传。

      https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1407496-background

      这样您就不必担心某个部分无法上传而其他部分上传了,等等。它还简化了您的服务器的操作,它要么获取文件,要么不获取文件。

      【讨论】:

      • 我只发送一个,但 urlsession 系统似乎将它一分为二。 ://
      猜你喜欢
      • 1970-01-01
      • 2021-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-01
      相关资源
      最近更新 更多