gpt4 book ai didi

swift - 多部分数据未将所有参数传递给服务器-Swift 3

转载 作者:行者123 更新时间:2023-11-30 12:32:12 26 4
gpt4 key购买 nike

我的要求是使用 REST API 将带有文件名和持续时间的录制音频文件上传到服务器

我必须形成多部分表单数据的代码如下

private func createRequestBody(boundary:"--BXDFG", multidata:Data, mime:"audio/mp4", filePathKey:"file", filename:"test", metas:["title":"Mytitle","duration":"30"] -> Data {

var body = Data()

body.append(Data("--\(boundary)\r\n".utf8))
body.append(Data("Content-Disposition: form-data; name=\"\(filePathKey)\"; filename=\"\(filename)\"\r\n".utf8))
body.append(Data("Content-Type: \(mime)\r\n\r\n".utf8))
body.append(multidata)
body.append(Data("\r\n".utf8))
if (metas != nil) {

for (key, value) in metas! {

body.append(Data("--\(boundary)\r\n".utf8))
body.append(Data("Content-Disposition: form-data; name=\"\(key)\"\r\n".utf8))
body.append(Data((value as! String).utf8))
body.append(Data("\r\n".utf8))
}

}
body.append(Data("--\(boundary)--\r\n".utf8))

return body

}

我正在做的是将音频作为 NSDATA 传递,并在 for 循环中将“标题”和“持续时间”添加到多部分表单请求中

在服务器端,我有以下代码

@api.route('/upload/<userid>', methods=['POST'])
def upload(userid):
if request.method == 'POST':
if 'title' not in request.form:
return jsonify({'error': 'Need a valid title for uploaded file', 'code': 403})

如果“title”未在多部分表单数据中传递,则服务器将返回错误响应。

就我而言,即使“标题”被添加为请求的一部分,数据也不会传递到服务器,并且服务器会返回错误。如果我只是单独传递音频数据,去掉服务器端对“标题”的验证,那么音频数据就成功上传到服务器了。

我无法理解为什么“标题”和“数据”没有传递到服务器

PS:API请求在POSTMAN客户端中工作正常。

谢谢

最佳答案

这解决了我的问题

更换线路

 body.append(Data("Content-Disposition: form-data; name=\"\(key)\"\r\n".utf8))

 body.append(Data("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n".utf8))

添加和附加/r/n

关于swift - 多部分数据未将所有参数传递给服务器-Swift 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43369247/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com