2017-04-12 57 views
0

我的要求是使用REST APIMultipartform數據在所有PARAMS沒有傳遞到服務器斯威夫特3

的代碼上傳一個文件名和持續時間與服務器的錄製的音頻文件我已經形成了多形式的數據如下面

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請求工作正常郵差客戶端。

感謝

+0

我不知道爲什麼這是偶然的克,但我可以建議你爲這種情況使用alamofire,它很容易,順利,檢查它: https://github.com/Alamofire/Alamofire –

回答

0

這解決了我的情況

更換線

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