【问题标题】:Howto save a base64-encoded image using node-red如何使用 node-red 保存 base64 编码的图像
【发布时间】:2018-02-14 21:26:12
【问题描述】:

我编写了一个 Android 应用程序,使用 HTTP-POST 请求发送一些文本(应保存在文件中)和图像(应保存为单独的文件) 凌空库。

图像被转换为​​字节数组。使用 Base64.encodeToString() 将此字节数组转换为字符串。此字符串被设置为发送到服务器的 JSON 对象中的属性。

服务器端的接口是node-red-server:接收数据并提取文件名和文本。到目前为止一切正常。但是当保存图像(这是一个 Base64 编码的字符串)时,只会将字符串写入 jpg 文件中。

剩下要做的就是解码图像字符串并将其保存为图像。我不知道该怎么做。我试过this的方法,但是node-red不知道Image()

我也没有完全理解,为什么发送图像的最佳方式是将其解析为字节数组并将该数组编码为 Base64 字符串。如果有人可以解释这个想法或给我链接一个教程,这可能会对我有所帮助。

如果您需要我的 app-code/node-red-flows 帮助,请告诉我。

【问题讨论】:

  • 我们无法帮助您了解为什么选择在发送之前对图像进行base64编码。
  • 嗯......你是对的,但我发现的大多数教程都是这样做的。所以我认为这样做是有原因的

标签: json image base64 http-post node-red


【解决方案1】:

有一个 base64 Node-RED 节点 (node-red-node-base64) 可以将 base64 编码字符串转换为 NodeJS 二进制缓冲区。

如果您在将字符串发送到文件节点之前通过它运行您的字符串,您将获得格式正确的图像。

【讨论】:

  • 感谢您的快速答复。我试过这个节点,但我仍然无法打开图像。我将图像字符串作为有效负载传递给该节点。生成的有效负载应该是 jpg 文件的内容。我理解对了吗?
  • 我试图打开这些文件,我的程序告诉我“解释 JPEG 图像文件时出错(不是 JPEG 文件:以 0x4c 0x7a 开头)”。如果我捕获的图像是 jpg 并且我对其进行编码并将其发送到服务器,它应该仍然是 jpg,不是吗?我收到了两个不同图像的错误
  • 假设您在 Android 端编码的是格式正确的 jpeg 流,那么这应该可以满足您的需求。
  • 在将图像编码为字符串后,我再次对其进行解码并将其显示在图像视图中。编码似乎是正确的。
  • 我解决了这个问题。感谢您的帮助,但节点将单行字符串作为输入很重要!
【解决方案2】:

我解决了这个问题。对于其他正在寻找答案的人,我发布了这个:

answer 中提到的 base64 Node-RED node hardillb 可以正常工作,但前提是整个字符串都在一行中。

如果您使用带有Base64.DEFAULT 标志的encodeToString() 函数,如下所示: String returnString = Base64.encodeToString(bytes, Base64.DEFAULT); 您收到一个多行字符串。 如果您使用标志 Base64.NO_WRAP 代替它可以在节点上正常工作。

【讨论】:

    猜你喜欢
    • 2011-10-19
    • 2016-09-18
    • 2015-05-04
    • 2019-02-08
    • 2013-04-08
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    • 2016-08-20
    相关资源
    最近更新 更多