這是最優雅的方式或技術,讓node.js服務器知道是否在服務器上創建文件?node.js服務器可以知道是否創建了服務器文件?
這個想法是:一個新的圖像已經創建(從網絡攝像頭等) - >發送一個事件!
UPDATE:在目錄中的新的文件的名稱是不知道先驗和由外部軟件生成的文件。
這是最優雅的方式或技術,讓node.js服務器知道是否在服務器上創建文件?node.js服務器可以知道是否創建了服務器文件?
這個想法是:一個新的圖像已經創建(從網絡攝像頭等) - >發送一個事件!
UPDATE:在目錄中的新的文件的名稱是不知道先驗和由外部軟件生成的文件。
我來到了這裏使用此代碼我自己的解決方案:
var fs = require('fs');
var intID = setInterval(check,1000);
function check() {
fs.exists('file.txt', function check(exists) {
if (exists) {
console.log("Created!");
clearInterval(intID);
}
});
}
你可以一個參數添加到檢查功能與文件的名稱,並調用它的路徑。
我在fs.watch()
上做了一些測試,如果沒有創建文件,它也不起作用。 fs.watch()
有多個問題無論如何,我絕不會建議使用它...它確實能夠檢查文件是否被刪除,但...
hank你的建議。這個想法是更通用的,即:我有一個目錄。當一個新文件彈出(你不知道它的名字,可能它包含一個時間戳或一個隨機字符串)時,節點如何知道? – 2014-08-28 00:45:23
您將始終知道該名稱,因爲上傳時可以獲取該文件的屬性,例如名稱或大小。 – 2014-08-28 00:47:15
另外,如果由於某種原因,你不知道文件名,你可以使用抓取所有的正則表達式,但這也會更新機器上其他國家的其他用戶正在更新的所有文件,沒有建議。 – 2014-08-28 00:50:59
你應該看看fs.watch()
。它允許您「觀察」文件或目錄,並在事情發生變化時接收事件。
注:文檔狀態fs.watch
不是跨平臺的一致性,所以你應該在使用它之前考慮。
fs.watch(fileOrDirectoryPath, function(event, filename) {
// Something changed with filename, trigger event appropriately
});
另外一個需要注意的從文檔:
提供回調文件名參數不支持每 平臺(目前它僅支持Linux和Windows)上。即使在 支持的平臺文件名並不總是保證提供。 因此,不要認爲文件名參數總是在 回調中提供,並且如果爲空,則有一些回退邏輯。
如果filename
無法在您的平臺上,你看,你可能需要做一些事情,你最初讀的目錄,並緩存在它的文件列表目錄。然後,當您從fs.watch
獲得事件時,請再次閱讀該目錄並將其與緩存的文件列表進行比較,以查看添加的內容(如果有的話)。
更新1:有一個很好的模塊調用watch, on github,這使得它易於觀看的新文件的目錄。
更新2:我扔在一起如何使用fs.watch
一個例子,當新的文件添加到一個目錄來獲取通知。我認爲我上面鏈接的模塊可能是更好的方法,但我認爲如果你自己做,它會是一個很好的例子。
注:這是一個相當簡單的例子,只是爲了說明它是如何工作的。它幾乎肯定可以更有效地完成,而且還遠遠沒有經過全面測試。
function watchForNewFiles(directory, callback) {
// Get a list of all the files in the directory
fs.readdir(directory, function(err, files) {
if (err) {
callback(err);
} else {
var originalFiles = files;
// Start watching the directory for new events
var watcher = fs.watch(directory, function(event, filename) {
// Get the updated list of all the files in the directory
fs.readdir(directory, function(err, files) {
if (err) {
callback(err);
} else {
// Filter out any files we already knew about
var newFiles = files.filter(function(f) {
return (originalFiles.indexOf(f) < 0);
});
// Reset our list of "original" files
originalFiles = files;
// If there are new files detected, call the callback
if (newFiles.length) {
callback(null, newFiles);
}
}
})
});
}
});
}
然後,看你會跟調用它的目錄:
watchForNewFiles(someDirectoryPath, function(err, files) {
if (err) {
// handle error
} else {
// handle any newly added files
// "files" is an array of filenames that have been added to the directory
}
});
你爲什麼要用'fs.watch'是'fs.exists'可用?另外,我想我記得在某處讀到'fs.watch()'創建了它找不到的文件(我認爲) – 2014-08-27 23:14:02
這個問題似乎在問如何檢測正在創建的新文件。 'fs.watch'可以通過操作系統級別的API執行此操作,而無需輪詢文件系統;即它效率更高。 – 2014-08-27 23:16:09
我會去測試一下:brb – 2014-08-27 23:17:09
如何被創建的文件?如果它是生成文件的節點,可能會觸發事件,或者其他程序可能通過IPC通知節點服務器。 – Adam 2014-08-27 22:45:44
該文件是由外部程序生成的 – 2014-08-28 00:43:35