簡體   English   中英

使用基於瀏覽器的JavaScript和Node處理本地文件系統

[英]Manipulating the local file system with browser-based JavaScript and Node

我正在制作一個項目,該項目需要允許用戶從瀏覽器與文件系統進行交互。 我有很多編寫客戶端JavaScript的經驗,並且有很多編寫Node腳本來處理Web抓取,數據分析和文件系統工作的經驗。 但是,該項目將允許用戶更改瀏覽器中的內容,然后將其保存到本地(最終保存到Web服務器)–我對此沒有經驗。

我已經安裝了browserifybrowserify-fs以在瀏覽器中使用Node的fs模塊,並使用了來自browserify-fs README中的示例來創建目錄,向其中寫入文件,然后讀取該文件:

var fs = require('browserify-fs');

fs.mkdir("/home", function(err){
    if (err) throw err;

    fs.writeFile("/home/hello-world.txt", "Hello world!", function(err) {
        if (err) throw err;

        fs.readFile("/home/hello-world.txt", "utf-8", function(err, data) {
            if (err) throw err;

            console.log(data);
        });
    });
});

在記錄“ Hello world!”的意義上,這種“有效”! 在控制台中。 但據我所知,它不會在本地創建目錄或保存文件。 我有些模糊的感覺,它是將這些內容暫時保存在瀏覽器中,並且當我離開時將其刪除。 但是我實際上想創建一個目錄並將文件保存在本地。 我可以單獨使用JavaScript嗎? 關於如何“關閉”基於瀏覽器的JavaScript和Node之間的循環,是否有很好的教程?

更新

我已經接受了TJ Crowder的答復–實際上,ExpressJS確實使JavaScript中的客戶端-服務器通信相對簡單。 我現在正在做的是,將用戶的條目保存到全局JSON對象。 當用戶單擊“保存”按鈕時,我使用字符串化的JSON更新<form>元素中隱藏的<input>元素的值。 然后我提交表單,Express的app.post()加上模塊body-parserreq.body給了我一切。 然后,我可以執行正常的Node文件系統操作。

自然,瀏覽器托管的JavaScript無法訪問用戶計算機的文件系統(目前;總有一天,可能會發生某種沙盒訪問方式-上一次嘗試失敗,但這並不意味着下一次嘗試必須這樣做)。

為此,您需要兩部分:

  1. 瀏覽器塊,它與用戶一起執行UI。

  2. 一個Node塊,它在用戶的機器上運行(因此可以訪問文件系統),瀏覽器塊用來執行實際的文件操作。

片段之間最簡單的交互方式可能是HTTP,您可以使用ExpressJS輕松支持它。

因此,例如,如果用戶要刪除文件:

  1. 用戶單擊說“刪除此文件”的內容
  2. 瀏覽器JavaScript通過Ajax通過HTTP將命令發送到Node進程
  3. 節點進程進行刪除並報告成功/失敗
  4. 瀏覽器JavaScript顯示結果

您不能僅使用Javascript執行此操作。 由於安全原因,在瀏覽器上運行的Javascript尚無足夠的權限(存在建議)。

https://developer.mozilla.org/en-US/docs/Web/API/File_and_Directory_Entries_API/Introduction#restrictions

由於文件系統是沙盒,因此Web應用程序無法訪問其他應用程序的文件。 您也無法讀取文件或將文件寫入用戶硬盤驅動器上的任意文件夾(例如,“我的圖片”和“我的文檔”)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM