Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 后端使用URLSession.shared.dataTask接收post方法的错误数据_Ios_Node.js_Swift - Fatal编程技术网

Ios 后端使用URLSession.shared.dataTask接收post方法的错误数据

Ios 后端使用URLSession.shared.dataTask接收post方法的错误数据,ios,node.js,swift,Ios,Node.js,Swift,我正在使用URLSession.shared.dataTask以base64格式发布图像数据,但在后端我接收到错误的数据(“+”替换为“”)。Post数据在base64中包含不同的参数和图像数据,但在req.body中,我发现body中所有出现的“+”都替换为“”。在postman和Android中,它可以工作并存储图像 func postDataToServer ( method : String, api_for : String, postData : String, completion

我正在使用
URLSession.shared.dataTask
以base64格式发布图像数据,但在后端我接收到错误的数据(“+”替换为“”)。Post数据在base64中包含不同的参数和图像数据,但在
req.body
中,我发现body中所有出现的“+”都替换为“”。在postman和Android中,它可以工作并存储图像

func postDataToServer ( method : String, api_for : String, postData : String, completion: @escaping (_ reponse : [String:AnyObject]?, _ success : Int, _ message : String) -> Void) {

    let getUrl = "http://xx.xx.xx.xx/timeSheet/saveImage"

    let request = NSMutableURLRequest(url: NSURL(string: getUrl)! as URL,
                                      cachePolicy: .useProtocolCachePolicy,
                                      timeoutInterval: 60.0)
    request.httpMethod = method
    request.allHTTPHeaderFields = headers


    if method == "POST" {
        var post = postData
        post.append("&devicename=\(UIDevice.current.modelName) \(UIDevice.current.systemVersion)")
        let postData = NSMutableData(data: "\(post)".data(using: String.Encoding.utf8)!)
        request.httpBody = postData as Data
        let datastring = NSString(data: postData as Data, encoding: String.Encoding.utf8.rawValue)

    }
    let dataTask = URLSession.shared.dataTask(with: request as URLRequest) { data, response, error in
        guard let data = data, error == nil else {
            print(error!)
            completion (nil, 1, (error?.localizedDescription)!)
            return
        }
        do {
            let responseObject = try JSONSerialization.jsonObject(with: data, options: [])
            let response = self.responseData(data: responseObject)
            completion (response.reponse, response.statuscode, response.message)

        } catch let jsonError {
            print(jsonError)
            completion (nil, 1,"Data Formate Error")
            print(String(data: data, encoding: .utf8)!)
        }
    }
    dataTask.resume()
}
后端代码node.js:

  router.post('/saveImage', async (req, res) =>{
    var response = {
      "statuscode" : 0,
      "statusmessage" : "Failed", 
      "result" : [],
    }
    var rawBody = String(req.body.photo)
    const base64Data = rawBody.replace(/^data:([A-Za-z-+/]+);base64,/, '');
    console.log(req.body.base64Data)

  require("fs").writeFile("/Users/sid/Desktop/FreeLance/WPD/out.jpeg", base64Data, 'base64', function(err) {
    console.log(err);
    res.send( JSON.stringify( response ));
  });
  })
代码有什么问题吗?
我应该使用Alamofire吗?

如果没有示例数据,很难判断。我猜服务器端的正则表达式(
const base64Data=rawBody.replace(/^data:([A-Za-z-+/]+);base64,/,”;
)是错误的。正则表达式仅用于删除“data:image/jpeg;base64,”来自image data base64的字符串,但它与邮递员呼叫和android设备一起工作。@sid mhatre:您正在发出一个多部分请求,而不是普通的post请求,我没有看到内容类型集或格式数据来满足多部分请求的需要。我没有发出多部分请求`let headers=[“content type”:“application/x-www-form-urlencoded”]`。