我正在向base64 string
服务器发送node.js
。但它在对象括号{}
前端代码:
我encode
base64字符串以保留它。
let options = {
headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded')
};
let encodedImage = encodeURIComponent(body);
return this._http.put<IUser>(`${BASE_URL}/api/users/${id}/photo`, encodedImage, options)
.map(data => {
return data;
})
.catch(err => {
// do whatever you want when error occurs
console.log(err);
// re-throw error so you can catch it when subscribing, fallback to generic error code
return Observable.throw(err || 'API_ERROR');
});
}
了Serverside:
let upload = (req, res) => {
let b64string = req.body;
console.log(b64string);
}
控制台日志为:
{ 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQA.....+idkVe3H/9k=': '' }
如何从对象中提取base64
字符串,以便我可以访问它。这似乎很简单,但我的大脑已经放弃了。任何帮助将不胜感激。
更新
更新2:
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
答案 0 :(得分:0)
似乎有些东西将你的字符串放在JSON编码的值中,因此{'...':'...'}。 您可以将get64编码的base64编码的字符串放在json对象中,这样您获得对象时就会得到预期的输入。你只需要从json键获取字符串。
希望这有帮助。
答案 1 :(得分:0)
此处的问题是您使用
创建PUT
请求
Content-Type : application/x-www-form-urlencoded
但您传递一个字符串作为数据。因此,body-parser
将此字符串视为key
,其中包含空value
,这就是您获取此控制台日志的原因。
所以解决这个问题,
let options = {
headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded')
};
let requestBody = new URLSearchParams()
requestBody.append('encodedImage',body)
return this._http.put < IUser > (`${BASE_URL}/api/users/${id}/photo`, requestBody, options)
所以我们说我们的内容类型为form-urlencoded
(这意味着您的所有数据都将作为巨型网址查询传递),我们传递了一个urlencoded格式(通过URLSearchParams)
请注意URLSearchParams浏览器兼容性。
如果您没有任何限制,请考虑使用multipart/form-data
代替您的文件上传。除new URLSearchParams()
为new FormData()
之外,上述逻辑将相同。