fs 文件操作

文件操作

require("fs");

1.複製文件

創建一個class2.js檔案

在class.js輸入:

fs = require("fs");

function copy(src, target) {
    console.log(target);
    fs.writeFileSync(target, fs.readFileSync(src));
}
copy("./class1.js","./class2.js");

但這樣的寫法容易產生內存溢出,以及同步阻塞

可改成

class.js

  fs = require("fs");

function copy(src, target) {
    fs.createReadStream(src).pipe(fs.createWriteStream(target));
};
copy("./class1.js","./class2.js");

2.同步讀取文件

3.同步寫入文件

發現class2.js整個文件變成abc,如果我只想讓abc附加在文件後呢?

改為appendFileSync

4.判斷路徑是否存在

exists(path, callback)

5.移除檔案

先新建一個class3.js

發現class3.js被移除了

6.移除資料夾

先新建一個名為class3的資料夾

7.創建資料夾

但不知道第二個參數是什麼意思,他是指檔案權限的意思,但檔案權限是什麼意思?

下面講一下檔案權限

8.readFile是異步的

多嘗試幾次,發現console的讀取順序不固定 9.同步讀取

10.讀取目錄內檔案

會返回一個檔案名稱產生的陣列

11.查看檔案詳細資訊

fs.stat(path, callback)

12.監聽文件

watchfile(),unwatchfile()

執行node class後在class1.js寫上東西後按儲存即會在console顯示訊息

13.createReadStream

createReadStream方法往往用於打開大型的文本文件,創建一個讀取操作的數據流。所謂大型文本文件,指的是文本文件的體積很大,讀取操作的緩存裝不下,只能分成幾次發送,每次發送會觸發一個data事件,發送結束會觸發end事件。

會發現得到的是一個buffer

加上後轉為string

另外

為什麼要有buffer?

fs.utimes

其他可參考下面文章

讀取出所有資料夾內的資料夾

不使用第三方模組解析上傳檔案

第三方模組 e.g. formidable, body-parser

index.html

server.js

這邊從 utf8 buffer array 轉為string 可參考 https://stackoverflow.com/questions/8936984/uint8array-to-string-in-javascript

但之後會發現檔案太大還是會 browser crash,大約 4mb以上,所以還是要用form/data來傳,並用 formidable 解析,如果不用其他模組仍可解析,但要自己parse ------WebKitFormBoundary 內的內容

因為 form/data 可以直接傳入 file input 的 files[0] 類行為 blob,但如果要用 post 必須在 body 傳入 arraybuffer,如果太大會導致 browser crash

上傳 file 轉為 stream

假設檔案長這樣

此時可用

將其轉為 stream 然後上傳到 minio 或 S3 之類地方。

將檔案從server 傳到 client

1.可用 express 之 res.download('檔案路徑')

或是使用

在前端部分可以如下下載檔案

前端取得上傳檔案進度

axios 取得上傳進度

Fetch API 目前還無法取得上傳進度

大檔案切片上傳

在前端把檔案切分,分成多的請求上傳,然後在後端合併。

clone 之後進入範例:resumable.js/samples/Node.js

然後把這幾個部分改一下:

前端

後端

app.js has been tweaked to send resumable a directory where to save the file (top most).

tweaked app.js to change the content of app.post('/uploads',...) see gist.

https://stackoverflow.com/a/35137586/4622645

產生大檔案

1024 or 1000

https://stackoverflow.com/questions/8632269/displaying-file-size-1000b-1kb-or-1024b-1kb

Last updated

Was this helpful?