【问题标题】:Node-Red Uploaded image gets corruptedNode-Red 上传的图像损坏
【发布时间】:2021-06-29 13:36:17
【问题描述】:

我有一个 Node-RED 流程来上传图像并将其保存到文件中。但是图像在上传/保存时损坏。我测试通过文件资源管理器更改文件,我的服务器完美地显示了我的图像。所以问题出在上传部分,当我下载上传的图片时,我的 Windows 照片显示“可能不支持文件类型”。

我的流程:

[{"id":"b561f39b.7a55c","type":"ui_upload","z":"85326e02.d8e2b","group":"e12d112e.2bd9c","title":"Hallenplan (PNG, 1280x600)","name":"","order":3,"width":0,"height":5,"chunk":"256","transfer":"binary","x":130,"y":380,"wires":[["7f8ff192.87745"]]},{"id":"7f8ff192.87745","type":"file","z":"85326e02.d8e2b","name":"","filename":"/tmp/hallenplan.png","appendNewline":false,"createDir":false,"overwriteFile":"true","encoding":"binary","x":550,"y":380,"wires":[[]]},{"id":"8f232064.9538","type":"http in","z":"85326e02.d8e2b","name":"","url":"/img/hallenplan.png","method":"get","upload":false,"swaggerDoc":"","x":170,"y":440,"wires":[["96426e36.186fb"]]},{"id":"96426e36.186fb","type":"file in","z":"85326e02.d8e2b","name":"","filename":"/tmp/hallenplan.png","format":"","x":400,"y":440,"wires":[["a62d44b7.b91498"]]},{"id":"751ec35b.adf85c","type":"http response","z":"85326e02.d8e2b","name":"","statusCode":"","headers":{},"x":770,"y":440,"wires":[]},{"id":"a62d44b7.b91498","type":"change","z":"85326e02.d8e2b","name":"Set Headers","rules":[{"t":"set","p":"headers","pt":"msg","to":"{}","tot":"json"},{"t":"set","p":"headers.content-type","pt":"msg","to":"image/png","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":590,"y":440,"wires":[["751ec35b.adf85c"]]},{"id":"e12d112e.2bd9c","type":"ui_group","name":"Upload","tab":"acda14fc.fcb598","order":2,"disp":true,"width":"12","collapse":false},{"id":"acda14fc.fcb598","type":"ui_tab","name":"Timo_Burkhardt","icon":"dashboard","disabled":false,"hidden":false}]

【问题讨论】:

  • 您需要在文本中添加更多细节,而不仅仅是期望人们导入随机流。说明您实际使用的节点。
  • 我添加了一张图片。
  • 你还需要补充说明。

标签: image upload node-red


【解决方案1】:

问题在于 ui-upload 节点将上传的文件分成 256kb 的块。

然后您已设置文件输出节点以覆盖每个传入消息上的文件,这意味着写入磁盘的文件仅包含您上传的图像的最后一块(最大 256kb)。

可能的快速解决方案可能是在 ui-upload 和文件节点之间插入一个连接节点,以将上传重新组合成一条消息。但我不确定这是否会起作用,因为我认为它不会将缓冲区作为合并的有效负载输出(因为 ui-upload 节点将类型设置为“字符串”)。

【讨论】:

  • 我添加了一个连接,但上传也不起作用。但你的解释听起来不错,我会尝试更多
  • 讨厌的 hack 是在 ui-upload 和 join 节点之间放置一个 change 节点,将 msg.parts.typestring 更改为 buffer
  • 我这样做了,但它也不起作用imgur.com/lZeYhGX 是吗?
  • 不,应该是buffer这个词,但可能还是不行
【解决方案2】:

这是将任意大小(适合内存)的 png 图像重复上传到 /tmp/image.png 的完整流程。

它是如何工作的:

  • 获取使用节点 ui_upload 上传的图像块
  • type设置为buffer,因为ui_node将默认type设置为string
  • 将块连接到内存中的 blob
  • 通过覆盖现有文件将 blob 保存到文件

流程代码:

[{"id":"87b7f497.057208","type":"file","z":"8130dbcf.fc6768","name":"","filename":"/tmp/image.png","appendNewline":false,"createDir":false,"overwriteFile":"true","encoding":"setbymsg","x":640,"y":220,"wires":[[]]},{"id":"b4191d57.653ad8","type":"join","z":"8130dbcf.fc6768","name":"","mode":"auto","build":"string","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":"false","timeout":"","count":"","reduceRight":false,"x":470,"y":220,"wires":[["87b7f497.057208"]]},{"id":"584ef1f0.f312e8","type":"change","z":"8130dbcf.fc6768","name":"Set type=buffer","rules":[{"t":"set","p":"parts.type","pt":"msg","to":"buffer","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":300,"y":220,"wires":[["b4191d57.653ad8"]]},{"id":"86a479d3.e5fd6","type":"ui_upload","z":"8130dbcf.fc6768","group":"ca0d541e.2985e","title":"upload2","name":"","order":1,"width":0,"height":5,"chunk":256,"transfer":"binary","x":130,"y":220,"wires":[["584ef1f0.f312e8"]]},{"id":"ca0d541e.2985e","type":"ui_group","name":"Konfiguration","tab":"b75d261a.ea0aa8","order":1,"disp":true,"width":"6","collapse":false},{"id":"b75d261a.ea0aa8","type":"ui_tab","name":"Floorplan","icon":"dashboard","disabled":false,"hidden":false}]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 2012-12-13
    • 2020-04-15
    • 2016-04-14
    • 2016-12-26
    • 2021-03-15
    • 2015-11-14
    相关资源
    最近更新 更多