ios - 后端使用 URLSession.shared.dataTask 为 post 方法接收错误数据
问题描述
我正在使用URLSession.shared.dataTask
以 base64 格式发布图像数据,但在后端我收到了错误的数据(“+”替换为“”)。发布数据包含与 base64 中的图像数据不同的参数,但在req.body
我发现正文中所有出现的“+”都替换为“”。在邮递员和 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 吗?
解决方案
推荐阅读
- symfony - 如何将 Symfony EasyAdmin 与具有构造函数的实体一起使用?
- sql - Redshift SQL - 使用无界处理和跟随运行 Sum
- html - 如何让我的网站剪辑路径形状不影响网站的其余部分?
- javascript - 使用JS通过按键激活脚本
- c# - MSBuild ZipDirectory 任务没有压缩整个目录?
- qt - TypeError:无法在 QML 中读取 null 的属性“宽度”
- python - 在 python 中使用 AES 进行图像加密
- php - 将基于 table_1 列值的两个表连接到匹配的 table_2 列名?
- c++11 - C++ Struct 属性可以在函数内更改,但在函数范围外保持不变
- java - JLabel 在其属性更改时位于顶层