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

2
@PHP Priest, 그렇게 할 수 있다면 AJAX를 통해 사용자의 파일 시스템에 대한 데이터를 은밀하게 전송할 수 있으며 사용자는 결코 알지 못할 것입니다. 프로그래밍 방식 으로 파일 입력 값을 설정할 수 있다면 얼마나 더 나빠질 지 상상해보십시오 . 네. 보안 문제들.
jinglesthula 2011

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내가 나열한 명령을 사용하기 만하면 언제든지 값을 가져올 수 있습니다 .


정의되지 않은 속성 '이름'을 읽을 수 없다는 오류가 발생하는 이유는 무엇입니까?
Gagantous 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 크롬에서 파일 이름 앞에 표시되지 않습니다 .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>

감사! 이는 전체 경로가 아닌 업로드 된 파일의 실제 이름을 파악하는 데 도움이되었습니다.
Evan 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.Eladly
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.