Используйте jQuery, чтобы получить выбранное имя файла без пути

я использовал этот:

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

чтобы выбрать имя файла, но он вернул полный путь, как в "C:\fakepath\filename - ... доктор." Часть "fakepath" на самом деле была там - не уверен, что это должно быть, но это мой первый раз, когда я работаю с именем файла загрузки файлов.

Как я могу просто получить имя файла (filename.док)?

11 ответов


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

или вы могли бы просто сделать (потому что это всегда C:\fakepath это добавлено по соображениям безопасности):

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

вам просто нужно сделать код ниже. Первый [0] - это доступ к элементу HTML, а второй [0] - доступ к первому файлу загрузки файла (я включил проверку в случае отсутствия файла):

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

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.


показать путь работы со всеми ОС

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

пример

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

как вернуть

filename.doc
filename.doc

вот как я это делаю, он работает довольно хорошо.

в вашем 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

возможно, какое-то дополнение для avoid fakepath:

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

Как насчет чего-то вроде этого?

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

Это должен быть jquery? Или вы можете просто использовать родной JavaScript yourpath.split("\") разбить строку на массив?


получить первый файл из элемента управления, а затем получить имя файла, он будет игнорировать путь к файлу на 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; 
} 

<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>

var filename=location.href.substr(location.href.lastIndexOf("/")+1);
alert(filename);