多部分数据未将所有参数传递给服务器-Swift 3
Posted
技术标签:
【中文标题】多部分数据未将所有参数传递给服务器-Swift 3【英文标题】:Multipartform data not passing in all params to server-Swift 3 【发布时间】:2017-04-12 12:14:29 【问题描述】:我的要求是使用 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”,那么服务器会返回一个错误响应。
在我的情况下,即使“标题”作为请求的一部分添加,数据也不会传递到服务器并且服务器返回错误。如果我只是单独传递音频数据,去掉服务器端对“title”的验证,那么音频数据就会成功上传到服务器。
我不明白为什么“标题”和“数据”没有传递到服务器
PS:API 请求在 POSTMAN 客户端中运行良好。
谢谢
【问题讨论】:
我不知道为什么会这样,但是我可以建议你使用 alamofire 来处理这种情况,它简单流畅,检查它:github.com/Alamofire/Alamofire 【参考方案1】:这解决了我的问题
换行
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
【讨论】:
您的意思是在为图像部分附加额外的 \r\n 后,您发布的代码运行良好?以上是关于多部分数据未将所有参数传递给服务器-Swift 3的主要内容,如果未能解决你的问题,请参考以下文章
将自定义参数传递给 uibutton #selector swift 3
如何将 NSData 参数传递给在 swift 3 中调用的目标 c 方法?