node-red教程3.3 file控件介紹

  File節點分爲兩種,功能分別是file in與file out
這裏寫圖片描述node

3.3.1 file的說明信息

  File in 控件
讀取文件的內容,輸出爲字符串或二進制緩衝區。
輸入
字符串形式的文件名
若是不在節點配置中設置,則該屬性設置爲須要讀取的文件名。linux

輸出
字符串或數組的輸出
文件的內容是一個字符串或二進制緩衝區
文件名
建議配置文件名的選項,能夠設置爲路徑\文件名
錯誤對象
棄用:若是在節點中啓用,當節點遇到讀取文件的錯誤時,它將發送一條沒有有效負載的消息,而且這個錯誤屬性設置爲錯誤細節。這種行爲模式被棄用,默認狀況下新的節點也不會啓用這種模式。
詳細信息
文件名應該是絕對路徑,不然應當是node-red進程工做目錄的相對路徑。
在Windows上,路徑分隔符可能須要轉義,例如:\Users\myUser.
可選地,一個文本文件能夠被分割成幾行,每一行輸出一條消息,或者將二進制文件分割成更小的緩衝塊——塊大小是依賴於操做系統的,但一般是64 k(linux/mac)或41 k(Windows)。
當分割成多個消息時,每條消息都有一個「部分的」屬性須要設置,這個「部分」應當造成一個完整的消息序列。
應該使用Catch節點捕獲和處理錯誤。web

  File out 控件
寫消息的載荷到一個文件,或者把內容添加到文件末端,或者替換現有的內容。或者,刪除該文件。
輸入
字符串形式的文件名
建議配置文件名的選項,能夠設置爲路徑\文件名
詳細信息
每條消息有效負載都將被添加到文件的末尾,能夠選擇在每條消息之間附加一個換行符(\n)字符.
若是msg.filename被使用,每次寫入後,文件都將被關閉。爲了得到最佳性能,使用一個固定的文件名。
它能夠被配置爲覆蓋整個文件而不是追加。例如,當把二進制數據寫入文件時,好比圖像,應該使用這個選項,而且應該禁用追加換行的選項。
或者,能夠配置這個節點來刪除文件。json

3.3.2 file的使用

  拖拽一個inject節點,用於輸入時間戳,再拖拽一個file節點,進行以下編輯:
這裏寫圖片描述
  1 文件名。編輯頁面下邊有提示,告訴咱們應該保存一個絕對路徑。如何知道某個文件夾的絕對路徑呢?你能夠先在電腦的文件管理器中找到這個文件夾,也就是在「個人電腦」裏打開這個文件夾,接下來把鼠標挪到地址欄,點擊
這裏寫圖片描述
  而後按下ctrl + c
這裏寫圖片描述
  路徑就複製下來了。若是你想在這個文件夾下新建一個文件,能夠在編輯file節點的頁面,文件名後邊的輸入框,也就是數字1標記的地方,粘貼,而後在路徑後手動輸入「\你須要的文件名」,就好比上圖的「E:\node-red數據\保存時間戳.txt」,而後把數字3標記的小方框勾選上去。
  若是沒有寫路徑的話,文件會被保存在「C:\Users\Administrator」下。
  數字2標記的「行爲」也有一些選項,因爲含義明確,再也不囉嗦了。
這裏寫圖片描述
  name以前也講過了,它隻影響節點中瀏覽器的外觀。
這裏寫圖片描述
程序以下數組

[{"id":"26f8b711.bff328","type":"inject","z":"a1f259d6.8791a8","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":150,"y":60,"wires":[["55fdbadc.ff6a44"]]},{"id":"55fdbadc.ff6a44","type":"file","z":"a1f259d6.8791a8","name":"保存","filename":"E:\\node-red數據\\保存時間戳.txt","appendNewline":true,"createDir":true,"overwriteFile":"false","x":350,"y":60,"wires":[]}]

  而後部署,點擊inject按鈕發送一些時間戳,能夠看到文本文檔裏有一些信息,說明file節點已經能夠工做了。
這裏寫圖片描述瀏覽器

3.3.3 file in 的使用

  File in控件的左右都有灰色的小方塊,而inject只是右側有一個小方塊,他們二者的功能相似,都是輸入控件。經過對比能夠猜出來,file in 控件左邊的小方塊,與inject左邊的小按鈕同樣,用於輸入觸發。
這裏寫圖片描述
  接下來用inject,file in與debug構建這樣的一條流
這裏寫圖片描述app

[{"id":"aa05ea70.5d7518","type":"file in","z":"a1f259d6.8791a8","name":"文件輸入","filename":"E:\\node-red數據\\保存時間戳.txt","format":"lines","chunk":false,"sendError":false,"x":380,"y":200,"wires":[["5512e46f.694dbc"]]},{"id":"4731210c.c0c1d","type":"inject","z":"a1f259d6.8791a8","name":"觸發","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":230,"y":200,"wires":[["aa05ea70.5d7518"]]},{"id":"5512e46f.694dbc","type":"debug","z":"a1f259d6.8791a8","name":"debug顯示","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":550,"y":200,"wires":[]}]

  點擊inject的按鈕,在調試窗口能夠看到如下信息:
這裏寫圖片描述
  你能夠把file in 節點的輸出選項變一下,每一個選項究竟是什麼做用,本身來體會下吧。
這裏寫圖片描述
  另外,講述file控件的時候咱們都用了文本文檔來舉例,我生怕讀者會認爲file控件只能用到文本上,那就大錯特錯了了。實際上,據我所知,有人用node-red作圖像識別,那麼node-red確定是可以讀取圖像的。下邊就是一個讀取圖像的例子,你可能須要稍微修改一下文件輸入的路徑哦。
這裏寫圖片描述ide

[{"id":"aa05ea70.5d7518","type":"file in","z":"a1f259d6.8791a8","name":"文件輸入","filename":"E:\\node-red數據\\設備桌面壁紙.jpg","format":"","chunk":false,"sendError":false,"x":380,"y":200,"wires":[["cb789ff1.414a6","28a1fe27.42ee92"]]},{"id":"4731210c.c0c1d","type":"inject","z":"a1f259d6.8791a8","name":"觸發","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":230,"y":200,"wires":[["aa05ea70.5d7518"]]},{"id":"cb789ff1.414a6","type":"file","z":"a1f259d6.8791a8","name":"文件輸出","filename":"E:\\node-red數據\\新的壁紙.jpg","appendNewline":false,"createDir":false,"overwriteFile":"false","x":540,"y":200,"wires":[]},{"id":"28a1fe27.42ee92","type":"debug","z":"a1f259d6.8791a8","name":"debug顯示","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":550,"y":280,"wires":[]}]