jQueryを使用して、パスなしでファイル入力の選択されたファイル名を取得する


153

私はこれを使いました:

$('input[type=file]').val()

選択したファイル名を取得しますが、「C:\ fakepath \ filename.doc」のようにフルパスを返しました。「fakepath」の部分は実際にそこにありました-想定されているかどうかはわかりませんが、ファイルアップロードのファイル名を扱うのは初めてです。

ファイル名(filename.doc)を取得するにはどうすればよいですか?


11
ブラウザーは実際のパスをに変更するC:\fakepath\ ため、悪意のあるサイトはJavaScriptを使用してコンピューターのディレクトリ構造に関する情報を収集できません。
11年

回答:


294
var filename = $('input[type=file]').val().split('\\').pop();

または、あなたはただ行うことができます(C:\fakepathそれは常にセキュリティ上の理由で追加されるためです):

var filename = $('input[type=file]').val().replace(/C:\\fakepath\\/i, '')

1
まさに私が必要なもの、マンジ!拡張子も確認する必要があるので、この例を次のように使用しました。var extension = filename.split( '。')。pop(); それも手に入れよう!ありがとう!
マーキー、2011年

それはFakepath資本Fと?
アレックス

16
@MikeDeSimone私はsplit( '\\')。pop();をテストしました。Win 7、Ubuntu 11.04、Mac OS Xでは、これらすべてで正常に動作します。
Alex

3
@アレックス:うわー、それはかなりクレイジーです。ですから、それは実際には、誰かの悪いJSコードがずっと前に修正されないという回避策にすぎません。MacでSafariを実行していますが、「C:\ fakepath \」が表示されます。(jsfiddle遊んください。)
Mike DeSimone

1
@VítorBaptistaWindowsファイルの名前にバックスラッシュを含めることはできません。AppleのWebサイトで説明されているように、「一部のオペレーティングシステムとドライブ形式ではこれらの文字をディレクトリ区切り文字として使用するため、ファイルとフォルダの名前にコロンとスラッシュを使用しないでください」とMacOSで可能です
joao.arruda

68

以下のコードを実行するだけです。最初の[0]はHTML要素へのアクセスで、2番目の[0]はファイルアップロードの最初のファイルへのアクセスです(ファイルがない場合の検証を含めました):

    var filename = $('input[type=file]')[0].files.length ? ('input[type=file]')[0].files[0].name : "";

1
このオプションを使用する際に考慮すべきことの1つ:[ファイルの選択]ボタンをもう一度クリックして開いているファイルウィンドウを表示し、エスケープボタンをクリックすると、コンソールエラーがスローされます。
luke_mclachlan 2017年

ええ、あなたは正しいですが、コードが名前を取得するためにコードのみを配置することが意図されていました。なぜなら、コードはハードコーディングされた位置から名前を取得しているため、ファイルがあるかどうかを確認する必要があるためです(この場合は、ファイルは1つだけですが、複数のファイルを含めることができ、コードはすべての要素で繰り返す必要があります)。しかし、確かに、コードを更新してこの検証を含めます。
Diego Cotini 2017年

23

Chromeが帰ってきた C:\fakepath\...セキュリティ上の理由でれ -ウェブサイトは、コンピューター上のファイルへのパスなど、コンピューターに関する情報を取得できません。

文字列のファイル名部分だけを取得するには、次のコマンドを使用できますsplit()...

var file = path.split('\\').pop();

jsFiddle

...または正規表現 ...

var file = path.match(/\\([^\\]+)$/)[1];

jsFiddle

...またはlastIndexOf()...

var file = path.substr(path.lastIndexOf('\\') + 1);

jsFiddle


21

すべてのOSでパスを取得

var filename = $('input[type=file]').val().replace(/.*(\/|\\)/, '');

C:\fakepath\filename.doc 
/var/fakepath/filename.doc

どちらも戻る

filename.doc
filename.doc

コード例var filename = $('input[type=file]').val().replace(/.*(\/|\\)/, '');はjQueryを使用しています。
ザレフェス2013

13

ここに私がそれをする方法があります、それはかなりうまくいきます。

あなたのHTMLで:

<input type="file" name="Att_AttributeID" onchange="fileSelect(event)" class="inputField" />

次に、jsファイルに簡単な関数を作成します。

function fileSelect(id, e){
    console.log(e.target.files[0].name);
}

複数のファイルを実行している場合は、これをループしてリストを取得することもできます。

e.target.files[0].name

このコンテキストではフィールドIDは何もしないので、JSの関数にはfileSelect(id、e)の代わりにeだけのパラメーターが1つ少ないはずです。fileSelect(e)だけです。解決策をありがとう:)。
Jasper Lankhorst 2017年

8

多分フェイクパスを避けるためのいくつかの追加:

var fileName = $('input[type=file]').val();
var clean=fileName.split('\\').pop(); // clean from C:\fakepath OR C:\fake_path 
alert('clean file name : '+ fileName);

5

このようなものはどうですか?

var pathArray = $('input[type=file]').val().split('\\');
alert(pathArray[pathArray.length - 1]);

4

それはjqueryでなければなりませんか?または、JavaScriptのネイティブyourpath.split("\\")を使用して文字列を配列に分割できますか?


3

コントロールから最初のファイルを取得してから、ファイルの名前を取得します。これにより、Chrome上のファイルパスが無視され、IEブラウザーのパスが修正されます。ファイルを保存するときはSystem.io.Path.GetFileName、IEブラウザーのみのファイル名を取得するメソッドを使用する必要があります

var fileUpload    = $("#ContentPlaceHolder1_FileUpload_mediaFile").get(0); 
var files         =  fileUpload.files; 
var mediafilename = ""; 

for (var i = 0; i < files.length; i++) { 
  mediafilename = files[i].name; 
} 

2
<script type="text/javascript">

    $('#upload').on('change',function(){
       // output raw value of file input
       $('#filename').html($(this).val().replace(/.*(\/|\\)/, '')); 

        // or, manipulate it further with regex etc.
        var filename = $(this).val().replace(/.*(\/|\\)/, '');
        // .. do your magic

        $('#filename').html(filename);
    });
</script>


1

この代替案が最も適切と思われます。

$('input[type="file"]').change(function(e){
        var fileName = e.target.files[0].name;
        alert('The file "' + fileName +  '" has been selected.');
});

0

ここでは、このように呼び出すことができますこれを私の入力ファイルコントロールにしましょう

  <input type="file" title="search image" id="file" name="file" onchange="show(this)"  />

これが、ファイルを選択すると呼び出されるJqueryです。

<script type="text/javascript">
    function show(input) {
        var fileName = input.files[0].name;
        alert('The file "' + fileName + '" has been selected.');               
            }

</script>

0

を使用して削除することもできます match

var fileName = $('input:file').val().match(/[^\\/]*$/)[0];
$('#file-name').val(fileName);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.