web-dev-qa-db-ja.com

JavaScriptのみを使用して、ファイルがローカルに存在するかどうかを確認します

HTMLファイルが置かれているファイルがローカルに存在するかどうかを確認したい。 JavaScriptでなければなりません。 JavaScriptは決して無効になりません。 jQueryは良くありませんが、できます。

ところで、私はMac用のチタンアプリを作っているので、「パッケージの内容を表示」をクリックする人からファイルを保護する方法を探しています。

15

あなたの質問はあいまいなので、あなたが本当に達成しようとしているものに応じて、複数の可能な答えがあります。

Titaniumを使用してデスクトップアプリケーションを推測しているように開発している場合、FileSystemモジュールのgetFileを使用してファイルオブジェクトを取得し、existsメソッドを使用して存在するかどうかを確認できます。

AppceleratorのWebサイトからの例を以下に示します。

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開発状況について尋ねていると思った人のために、それは私が与えた2つの答えです:

1)サーバー側のファイルが存在するかどうかを確認したい。この場合、ajaxリクエストを使用してファイルを取得し、受信した応答に反応することができます。ただし、Webサーバーによって公開されているファイルのみをチェックできることに注意してください。より良いアプローチは、ファイル名を指定してチェックを行い、ajax経由でそのスクリプトを呼び出すサーバー側スクリプト(たとえば、php)を記述することです。また、十分に注意しないと、アプリケーション/サーバーに非常に簡単にセキュリティホールを作成できることに注意してください。

2)クライアント側のファイルが存在するかどうかを確認したい。この場合、他の人から指摘されたように、セキュリティ上の理由から許可されていません(ただし、IEはこれまでActiveXおよびScripting.FileSystemObjectクラスを介して許可されていました)ファイルを確認できるようにしたいので、このことは忘れてください。

15
dSebastien

「Kranu」は「ファイルシステムとの唯一の相互作用はjsファイルのロードに関するものである」と有益にアドバイスしているためです。 。 。 '、つまり、エラーチェックを行うことで、少なくともファイルがnot存在するかどうかがわかります。これは目的には十分でしょうか。

ローカルマシンから、ファイルをロードしようとすることで、ファイルが存在するかどうかを確認できますnot(それを外部スクリプトとして使用し、エラーをチェックします。例えば:

<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など)。
  • これをループで使用している場合は、get_error関数が正しいアイテムを参照できるように、一意の要素ID(el.id =)を設定します。
  • onerror(el.onerror = function)行の設定は少し複雑です。get_error関数を呼び出してel.idを渡す必要があるためです-関数への通常の参照(例:el.onerror = get_error)が設定されている場合、その後、el.idパラメーターを渡すことはできませんでした。
  • これは、ファイルが存在しないかのみがチェックされることに注意してください。
10
Siubear

これを使用できます

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

Javascriptはファイルシステムにアクセスできず、存在を確認できません。ファイルシステムとの唯一のやり取りは、jsファイルと画像(png/gif/etc)の読み込みです。

Javascriptはこのタスクではありません

4
Kranu

Javascriptを使用してファイルが存在するかどうかを確認したい場合は、セキュリティ上の理由により、javascriptはファイルシステムにアクセスできません。

3
Andrey

幸いなことに、標準のJSでクライアント側のファイルシステムにアクセスすることは(セキュリティ上の理由で)不可能です。ただし、MicrosoftのIE専用ActiveXコンポーネントなど、独自のソリューションもいくつかあります。

3
John Manak

別の方法:特権アクションオブジェクトを使用してこの存在チェックを実装する「非表示」アプレット要素を使用し、次の方法でrunメソッドをオーバーライドできます。

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

これを行う方法の1つは、imgタグを作成し、src属性を探しているファイルに設定することです。 img要素のonloadまたはonerrorは、ファイルが存在するかどうかに基づいて起動します。このメソッドを使用してデータを読み込むことはできませんが、特定のファイルが存在するかどうかを判断できます。

1
MEC

これを試して:

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
    }
  }
});
0
Samuel Tees