jQuery를 사용하여 경로없이 파일 입력의 선택된 파일 이름을 가져옵니다.


153

나는 이것을 사용했다 :

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

파일 이름을 선택했지만 "C : \ fakepath \ filename.doc"에서와 같이 전체 경로를 반환했습니다. "fakepath"부분은 실제로 존재했는지 확실하지 않지만 파일 업로드의 파일 이름으로 작업 한 것은 이번이 처음입니다.

파일 이름 (filename.doc)을 어떻게 얻을 수 있습니까?


11
브라우저는 실제 경로를 변경하여 C:\fakepath\ 악의적 인 사이트가 자바 스크립트를 사용하여 컴퓨터의 디렉토리 구조에 대한 정보를 수집 할 수 없도록합니다.
준설

답변:


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 (); 그것도 가져와! 감사!
marky

그것은인가 Fakepath자본 F로?
alex

16
@MikeDeSimone 나는 split ( '\\'). pop (); Win 7, Ubuntu 11.04 및 Mac OS X에서 모두 잘 작동합니다.
Alex

3
@Alex :와, 정말 미쳤어 요. 따라서 실제로 수정되지 않는 누군가의 잘못된 JS 코드에 대한 해결 방법입니다. Mac에서 Safari를 실행하고 있는데 거기에 "C : \ fakepath \"가 있습니다.
Mike DeSimone

1
@ VítorBaptista Windows 파일은 이름에 백 슬래시를 사용할 수 없습니다. 그것은 비록 맥 OS에 가능하다 "일부 운영 체제 및 드라이브 포맷 디렉토리 구분 기호로 이러한 문자를 사용하기 때문에 당신은 파일 및 폴더의 이름에 콜론 및 슬래시를 사용하지 않아야합니다" 에 설명 된대로 애플의 웹 사이트
joao.arruda

68

아래 코드 만하면됩니다. 첫 번째 [0]은 HTML 요소에 액세스하는 것이고, 두 번째 [0]은 파일 업로드의 첫 번째 파일에 액세스하는 것입니다 (파일이없는 경우 유효성 검사 포함).

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

1
이 옵션을 사용할 때 고려해야 할 사항 : '파일 선택'버튼을 다시 클릭하여 열린 파일 창을 연 다음 이스케이프 버튼을 클릭하면 콘솔 오류가 발생합니다.
luke_mclachlan

그렇습니다. 그러나 코드의 이름은 하드 코드 된 위치에서 이름을 가져 오기 때문에 파일이 있는지 확인해야하기 때문에 이름을 가져 오는 의도는 코드였습니다. 하나의 파일이지만 더 많은 파일을 가질 수 있으며 코드는 모든 요소에 의해 반복되어야합니다. 그러나 코드를 업데이트하고이 유효성 검사를 포함시킬 것입니다.
Diego Cotini

23

C:\fakepath\...보안상의 이유로 Chrome이 반환 됩니다. 웹 사이트에서 컴퓨터의 파일 경로와 같은 컴퓨터에 대한 정보를 얻을 수 없어야합니다.

문자열의 파일 이름 부분 만 얻으려면 다음을 사용할 수 있습니다 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를 사용하고 있습니다.
Zarepheth

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) 대신 fileSelect (e) 대신 e 만 1 매개 변수를 갖지 않아야합니다. 솔루션에 감사드립니다 :).
Jasper Lankhorst

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.GetFileNameIE 브라우저에서만 파일 이름을 가져 오려면 메소드를 사용해야 합니다

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.