从对象中提取Base64字符串

时间:2018-02-20 12:50:46

标签: javascript node.js angular

我正在向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字符串,以便我可以访问它。这似乎很简单,但我的大脑已经放弃了。任何帮助将不胜感激。

更新

enter image description here

更新2:

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

2 个答案:

答案 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()之外,上述逻辑将相同。