簡體   English   中英

僅使用 JavaScript 檢查本地文件是否存在

[英]Check if a file exists locally using JavaScript only

我想檢查本地是否存在文件,即 HTML 文件所在的位置。 它必須是 JavaScript。 JavaScript 永遠不會被禁用。 jQuery 不好但可以做。

順便說一句,我正在為 Mac 制作一個鈦應用程序,所以我正在尋找一種方法來保護我的文件免受點擊“顯示包內容”的人的攻擊。

您的問題模棱兩可,因此根據您真正想要實現的目標,有多種可能的答案。

如果您正在開發我猜測使用 Titanium 的桌面應用程序,那么您可以使用 FileSystem 模塊的 getFile 來獲取文件對象,然后使用 exists 方法檢查它是否存在。

這是來自 Appcelerator 網站的示例:

var homeDir = Titanium.Filesystem.getUserDirectory();
var mySampleFile = Titanium.Filesystem.getFile(homeDir, 'sample.txt');

if (mySampleFile.exists()) {
    alert('A file called sample.txt already exists in your home directory.');
    ...
}

查看getFile 方法參考文檔

存在方法參考文檔

對於那些認為他是在詢問常見的 Web 開發情況的人,以下是我給出的兩個答案:

1) 您要檢查服務器端文件是否存在。 在這種情況下,您可以使用 ajax 請求嘗試獲取文件並對收到的答案做出反應。 不過,請注意,您只能檢查 Web 服務器公開的文件。 更好的方法是編寫一個服務器端腳本(例如,php)來為您進行檢查,給定文件名並通過 ajax 調用該腳本。 另外,請注意,如果您不夠小心,很容易在應用程序/服務器中創建安全漏洞。

2) 您想檢查客戶端文件是否存在。 在這種情況下,正如其他人向您指出的那樣,出於安全原因,這是不允許的(盡管 IE 過去通過 ActiveX 和 Scripting.FileSystemObject 類允許這樣做)並且這樣很好(沒有人希望您能夠通過他們的文件),所以忘記這一點。

由於 'Kranu' 很有幫助地建議 '與文件系統的唯一交互是加載 js 文件。 . .',這表明通過錯誤檢查這樣做至少會告訴您該文件是否存在 - 這可能足以滿足您的目的?

本地機器上,您可以通過嘗試將文件作為外部腳本加載然后檢查錯誤來檢查文件是否不存在 例如:

<span>File exists? </span>
<SCRIPT>
    function get_error(x){
        document.getElementsByTagName('span')[0].innerHTML+=x+" does not exist.";
    }
    url="   (put your path/file name in here)    ";
    url+="?"+new Date().getTime()+Math.floor(Math.random()*1000000);
    var el=document.createElement('script');
    el.id="123";
    el.onerror=function(){if(el.onerror)get_error(this.id)}
    el.src=url;
    document.body.appendChild(el);
</SCRIPT>

一些筆記...

  • 將一些隨機數據附加到文件名(url+="?"+new Date 等),以便瀏覽器緩存不會提供舊結果。
  • 如果您在循環中使用它,請設置一個唯一的元素 id (el.id=),以便 get_error 函數可以引用正確的項目。
  • 設置 onerror (el.onerror=function) 行有點復雜,因為需要它調用 get_error 函數並傳遞 el.id - 如果只是設置了對該函數的正常引用(例如:el.onerror=get_error),那么就不能傳遞 el.id 參數。
  • 請記住,這只檢查文件是否不存在。

你可以用這個

function LinkCheck(url)
{
    var http = new XMLHttpRequest();
    http.open('HEAD', url, false);
    http.send();
    return http.status!=404;
}

Javascript 無法訪問文件系統並檢查是否存在。 與文件系統的唯一交互是加載 js 文件和圖像(png/gif/etc)。

Javascript 不是這個任務

如果您想使用 javascript 檢查文件是否存在,那么不,據我所知,由於安全原因,javascript 無法訪問文件系統。

幸運的是,使用標准 JS 訪問客戶端文件系統是不可能的(出於安全原因)。 雖然存在一些專有解決方案(如 Microsoft 的 IE-only ActiveX 組件)。

另一種選擇:您可以使用“隱藏”小程序元素,該元素使用特權操作對象實現此存在檢查,並通過以下方式覆蓋您的 run 方法:

File file = new File(yourPath);
return file.exists();

我發現這樣做的一種方法是創建一個 img 標記並將 src 屬性設置為您要查找的文件。 img 元素的 onload 或 onerror 將根據文件是否存在觸發。 您無法使用此方法加載任何數據,但您可以確定特定文件是否存在。

試試這個:

window.onclick=(function(){
  try {
    var file = window.open("file://mnt/sdcard/download/Click.ogg");
    setTimeout('file.close()', 100);
    setTimeout("alert('Audio file found. Have a nice day!');", 101);
  } catch(err) {
    var wantstodl=confirm("Warning:\n the file, Click.ogg is not found.\n do you want to download it?\n "+err.message);
    if (wantstodl) {
      window.open("https://www.dropbox.com/s/qs9v6g2vru32xoe/Click.ogg?dl=1"); //downloads the audio file
    }
  }
});

如果您使用 Nodejs,則不需要外部庫,您只需導入文件系統模塊。 隨意編輯下面的代碼: const fs = require('fs')

const path = './file.txt'

fs.access(path, fs.F_OK, (err) => {
  if (err) {
    console.error(err)
    return
  }

  //file exists
})

暫無
暫無

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

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