javascript、jquery-ajaxを使用して<input type = 'file'>の変更時に選択したファイルの完全パスを取得する方法


240

を使用してファイルを選択しているときにファイルの完全パスを取得する方法 <input type=‘file’>

<input type="file" id="fileUpload">
<script type="text/javascript">
function getFilePath(){
     $('input[type=file]').change(function () {
         var filePath=$('#fileUpload').val(); 
     });
}
</script>

しかしfilePath変数にはonly name、選択されたファイルが含まれ、は含まれませんfull path
私はネットで検索しましたが、セキュリティ上の理由から、ブラウザ(FF、クローム)はファイル名を指定しているようです。
選択したファイルの完全なパスを取得する他の方法はありますか?




@nauphalコメントに感謝しますが、選択したファイルの完全なパスを取得する他の方法はありますか?
Yogesh Pingle 2013年

1
サーバー上のファイルのパスを取得する必要がある場合(たとえば、サーバーで実行するコマンドラインユーティリティへのWebインターフェイスを構築する場合)、常に相対パスを構築し、それを送信することができます。 <option>として、ツリーウィジェットを使用するか、タイプアヘッドしてユーザーに選択させ、サーバーにファイルを処理させます。
dardenfall 2013年

回答:


164

セキュリティ上の理由から、ブラウザはこれを許可しません。つまり、ブラウザのJavaScriptはファイルシステムにアクセスできませんが、HTML5ファイルAPIを使用すると、FirefoxのみmozFullPathがプロパティを提供しますが、値を取得しようとすると、空の文字列が返されます。

$('input[type=file]').change(function () {
    console.log(this.files[0].mozFullPath);
});

http://jsfiddle.net/SCK5A/

時間を無駄にしないでください。

編集:ファイルを読み取るためにファイルのパスが必要な場合は、代わりにFileReader APIを使用できます。SOに関する関連質問は次のとおりです。アップロードする前に画像をプレビューします。


1
同じリンクで私を助けたので、このリンクを参照してください。
Amir Tugi 2016年

...リンクされた質問のタイトルは次のとおりです。アップロードする前に画像をプレビューします
未定義

それでも、サーバーに送信するパスのURLを取得しました
Amir Tugi

1
@AmirTugiそのソリューションはファイルを読み取ります。ユーザーのファイルシステム上のファイルのパスとは関係ありません。
未定義

では、このウェブサイトはどうやってそれを実現できるのでしょうか
SaidbakR 2017年

102

これを試して:

正確なパスではなく一時的なパスが表示されます。このjsfiddleの例のように選択した画像を表示する場合は、このスクリプトを使用できます(他のファイルだけでなく、画像も選択して試してください)。

JSFIDDLE

これがコードです:-

HTML:-

<input type="file" id="i_file" value=""> 
<input type="button" id="i_submit" value="Submit">
<br>
<img src="" width="200" style="display:none;" />
<br>
<div id="disp_tmp_path"></div>

JS:-

$('#i_file').change( function(event) {
    var tmppath = URL.createObjectURL(event.target.files[0]);
    $("img").fadeIn("fast").attr('src',URL.createObjectURL(event.target.files[0]));

    $("#disp_tmp_path").html("Temporary Path(Copy it and try pasting it in browser address bar) --> <strong>["+tmppath+"]</strong>");
});

それはまさにあなたが探していたものではありませんが、どこかであなたを助けることができるかもしれません。


他のファイルタイプでこれを行う方法はありますか:pdf、docxなど、画像の代わりにアイコンを表示しますか?私の用途では、ファイルを送信する前にページにファイルを保存したいので、ユーザーにコメントを追加して、テキスト付きのメッセージのようにそれをアップロードする機会を与えます。
user1040975 2015

「tmppath」のコンテンツをブラウザのアドレスバーに配置するだけでよいですか?試してみましたがうまくいきません。
MacGruber 2015年

@GangsarSwaPurba残念ながらIE9では機能しません-URL.createObjectURL()を参照してください
naXa 2016

@naXaよろしい、上のコメントを編集します。ええと、残念ながらコメントを編集できません
Gangsar Swapurba

2
3行目では、URL.createObjectURL(event.target.files [0])の代わりにtmppath変数を使用する必要があります。これはより最適化されています。
Wessam El Mahdy、2017年

17

あなたはそうすることはできません-ブラウザはセキュリティ上の懸念のためこれを許可しません。

入力type = fileオブジェクトを使用してファイルを選択した場合、valueプロパティの値は、Webページの表示に使用されるセキュリティゾーンの「サーバーにファイルをアップロードするときにローカルディレクトリパスを含める」セキュリティ設定の値に依存します入力オブジェクトを含みます。

選択したファイルの完全修飾ファイル名は、この設定が有効になっている場合にのみ返されます。この設定を無効にすると、Internet Explorer 8は、ローカルドライブとディレクトリパスを文字列C:\ fakepath \に置き換えて、不適切な情報漏えいを防ぎます。

その他

);イベント変更機能の最後でこれを逃しました。

また、変更イベントの関数を作成せずに、以下のように使用してください。

<script type="text/javascript">

    $(function()
    {
        $('#fileUpload').on('change',function ()
        {
            var filePath = $(this).val();
            console.log(filePath);
        });
    });

</script>

19
コードを試してみましたが、パスが間違っています。私のファイルはDディレクトリにありますが、値は来ていますC:\fakepath\test.xls
Rahul Munjal

3
C:\ fakepath \ fileName.xls ...誰でもこれを解決する方法を知っていますか?
アンドレ・ドス・サントス

14

できません。セキュリティは、クライアントコンピューターのファイリングシステムについて何かを知っているためにあなたを停止します-それさえ持っていないかもしれません!それは、MAC、PC、タブレット、またはインターネット対応の冷蔵庫である可能性があります-知らない、知らない、知らない。また、完全なパスを取得すると、特にネットワークドライブなどのクライアントに関する情報が得られる場合があります。

実際、特定の条件下で取得できますが、ActiveXコントロールが必要であり、99.99%の状況では機能しません。

とにかくそれを使用してファイルを元の場所に復元することはできません(ダウンロードの保存場所やダウンロードの保存場所を完全に制御することはできないため)。


11

もしかして?

$('#i_file').change( function(event) {
var tmppath = URL.createObjectURL(event.target.files[0]);
    $("img").fadeIn("fast").attr('src',tmppath);       
});

4
これはファイルへのパスを与えません。なぜこれほど何度も賛成票を投じたのですか?
FlowUI。SimpleUITesting.com

7

次のコードを使用して、アップロードされたファイルの有効なローカルURLを取得できます。

<script type="text/javascript">    
    var path = (window.URL || window.webkitURL).createObjectURL(file);
    console.log('path', path);
</script>


1

フォルダ全体をアップロードするオプションがある場合は、

<input type="file" webkitdirectory directory multiple/>

変更イベントには以下が含まれます:

.target.files[...].webkitRelativePath: "FOLDER/FILE.ext"

1

あなたはそうすべきではありません...そして私は最新のブラウザでそれを試すことは(私が知っていることから)役に立たないと思います...一方で、すべての最新のブラウザはこれを許可しません...

サーバーサイドで値を取得するなどの回避策を見つけるために通過できる他のリンク。ただし、クライアントサイドでは使用できません。

jQueryを使用したファイル入力からの完全パス
Firefox 3のHTML入力フォームからファイルパスを取得する方法


-1

ファイル要素には配列呼び出しfilesがあり、必要なものすべてが含まれています

var file = document.getElementById("upload");

file.addEventListener("change", function() {
    for (var i = 0; i < file.files.length; i++) {
        console.log(file.files[i].name);
    }
}, false);

2
アップロードされたファイルの完全なパスは提供されません。
セルジュマーレ

-3

選択したファイルの完全パスを取得して、IE11とMS Edgeでのみアップロードできます。

var fullPath = Request.Form.Files["myFile"].FileName;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.