Используйте jQuery, чтобы получить файл с выбранным именем файла без пути
Я использовал это:
$('input[type=file]').val()
чтобы выбрать имя файла, но он вернул полный путь, как в "C:\fakepath\filename.doc". Часть "fakepath" была на самом деле там - не уверена, должна ли она быть, но я впервые работаю с именем файла загрузки файлов.
Как я могу просто получить имя файла (filename.doc)?
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 : "";
Получить путь работы со всеми ОС
var filename = $('input[type=file]').val().replace(/.*(\/|\\)/, '');
пример
C:\fakepath\filename.doc
/var/fakepath/filename.doc
Оба возвращаются
filename.doc
filename.doc
Chrome возвращается C:\fakepath\...
по соображениям безопасности - веб-сайт не должен иметь возможность получать информацию о вашем компьютере, например, путь к файлу на вашем компьютере.
Чтобы получить только часть имени файла в строке, вы можете использовать split()
...
var file = path.split('\\').pop();
... или регулярное выражение...
var file = path.match(/\\([^\\]+)$/)[1];
...или же lastIndexOf()
...
var file = path.substr(path.lastIndexOf('\\') + 1);
Вот как я это делаю, это работает довольно хорошо.
В вашем 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
Может быть, какое-то дополнение для избежания поддельного пути:
var fileName = $('input[type=file]').val();
var clean=fileName.split('\\').pop(); // clean from C:\fakepath OR C:\fake_path
alert('clean file name : '+ fileName);
Эта альтернатива кажется наиболее подходящей.
$('input[type="file"]').change(function(e){
var fileName = e.target.files[0].name;
alert('The file "' + fileName + '" has been selected.');
});
Как насчет этого?
var pathArray = $('input[type=file]').val().split('\\');
alert(pathArray[pathArray.length - 1]);
<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>
Это должно быть 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;
}
Здесь вы можете позвонить так. Пусть это мой элемент управления входным файлом
<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>
var filename=location.href.substr(location.href.lastIndexOf("/")+1);
alert(filename);
Мы также можем удалить его, используя match
var fileName = $('input:file').val().match(/[^\\/]*$/)[0];
$('#file-name').val(fileName);