jQuery:<input type =“ file” />から選択されたファイル名を取得します


90

このコードはIEで動作するはずです(Firefoxでテストすらしないでください)が、動作しません。添付ファイルの名前を表示したいのですが。何か助けは?

<html>
<head>
  <title>example</title>    
  <script type="text/javascript" src="../js/jquery.js"></script>
  <script type="text/javascript">  
        $(document).ready( function(){            
      $("#attach").after("<input id='fakeAttach' type='button' value='attach a file' />");      
      $("#fakeAttach").click(function() {            
        $("#attach").click();        
        $("#maxSize").after("<div id='temporary'><span id='attachedFile'></span><input id='remove' type='button' value='remove' /></div>");        
        $('#attach').change(function(){
          $("#fakeAttach").attr("disabled","disabled");          
          $("#attachedFile").html($(this).val());
        });        
        $("#remove").click(function(e){
          e.preventDefault();
          $("#attach").replaceWith($("#attach").clone());
          $("#fakeAttach").attr("disabled","");
          $("#temporary").remove();
        });
      })
    }); 
  </script> 
</head>
<body>
  <input id="attach" type="file" /><span id="maxSize">(less than 1MB)</span>    
</body>
</html>

私の答えを確認してください、これはこれを達成するための最良かつ最も理解できる方法だと思います。
James111、2015年

回答:


147

それは書くのと同じくらい簡単です:

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

とにかく、名前またはID属性を使用して入力を選択することをお勧めします。そして、イベントでは、次のようになります。

$('input[type=file]').change(function(e){
  $in=$(this);
  $in.next().html($in.val());
});

ありがとうございました!これは、私が提起した以前の(そして単純化された)問題で機能しましたが、拡張バージョンでは機能しません。

ファイルの完全なパスを取得する方法上記のコードはファイル名のみを提供します。
Khurram Ijaz、2011

3
@PHP Priest、できません。ブラウザはそのような情報を公開しません。
zneak 2011

2
@PHP Priestがそれを行うことができれば、AJAXを介してユーザーのファイルシステムに関するデータを不正に送信する可能性があり、ユーザーは知らないでしょう。プログラムでファイル入力の値を設定できるとしたら、それがどれほど悪化するか想像してみてください。うん。セキュリティ上の問題。
jinglesthula

1
これは少し上に見えますか?私が挙げた方法は、はるかに簡単で理解しやすいものです。
James111 2015年

20

最も簡単な方法は、次のの行をjquery使用することです。これを使用すると、意味のないことはなく、/fakepathアップロードしたファイルをすぐに取得できます。

$('input[type=file]')[0].files[0]; // This gets the file
$('#idOfFileUpload')[0].files[0]; // This gets the file with the specified id

その他の便利なコマンドは次のとおりです。

ファイルの名前を取得するには:

$('input[type=file]')[0].files[0].name; // This gets the file name

ファイルのタイプを取得するには:

PNGをアップロードすると、返されます image/png

$("#imgUpload")[0].files[0].type

ファイルのサイズ(バイト単位)を取得するには:

$("#imgUpload")[0].files[0].size

またon('change'、これらのコマンドを使用する必要はありません。いつでも値を取得できます。たとえば、ファイルをアップロードし、ユーザーがをクリックしたときに、uploadリストにあるコマンドを使用するだけです。


未定義のプロパティ 'name'を読み取れませんというエラーが発生するのはなぜですか?
2017年

19
$('input[type=file]').change(function(e){
    $(this).parents('.parent-selector').find('.element-to-paste-filename').text(e.target.files[0].name);
});

C:\fakepath\を使用している場合、このコードはGoogle Chromeのファイル名の前に表示されません.val()


4
<input onchange="readURL(this);"  type="file" name="userfile" />
<img src="" id="blah"/>
<script>
 function readURL(input) {
    if (input.files && input.files[0]) {
        var reader = new FileReader();

        reader.onload = function (e) {
            $('#blah')
                    .attr('src', e.target.result)
                    .width(150).height(200);
        };

        reader.readAsDataURL(input.files[0]);
        //console.log(reader);
        //alert(reader.readAsDataURL(input.files[0]));
    }
}
</script>

ありがとう!これは、フルパスではなく、アップロードされたファイルの実際の名前を取得するのに役立ちました。
エヴァンM

3

私は正しく動作する以下を使用しました。

$('#fileAttached').attr('value', $('#attachment').val())

2
//get file input
var $el = $('input[type=file]');
//set the next siblings (the span) text to the input value 
$el.next().text( $el.val() );

1

非表示のリセットボタンを追加します。

<input id="Reset1" type="reset" value="reset" class="hidden" />

入力をクリアするには、リセットボタンをクリックします。

$("#Reset1").click();

1
非表示のボタンをクリックできますか?
DaveWalley 2014

-1
<input onchange="readURL(this);"  type="file" name="userfile" />
<img src="" id="viewImage"/>
<script>
 function readURL(fileName) {
    if (fileName.files && fileName.files[0]) {
        var reader = new FileReader();

        reader.onload = function (e) {
            $('#viewImage')
                    .attr('src', e.target.result)
                    .width(150).height(200);
        };

        reader.readAsDataURL(fileName.files[0]);
    }
}
</script>

おかげで私はこれを検索していましたが、これは主題ではありませんが、それはあなたが知っている私の答えでした;)
Tarek.Elaly
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.