【发布时间】:2020-12-17 18:05:57
【问题描述】:
希望有人能对这种行为有所了解。
- 需要将大文件(例如 50mb+)上传到服务器
- 上传被分成多个请求,而不是单个请求中的块(参见查尔斯图片)
- 使用其中任何一个都具有相同的行为。
URLSession.shared.dataTaskURLSession.shared.uploadTaskURLSession.shared.uploadTask(withStreamedRequest:)URLSession.shared.dataTaskPublisher
- 服务器是 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