Используйте jQuery, чтобы получить выбранное имя файла без пути
я использовал этот:
$('input[type=file]').val()
чтобы выбрать имя файла, но он вернул полный путь, как в "C:fakepathfilename - ... доктор." Часть "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();
...или регулярные выражения...
var file = path.match(/\([^\]+)$/)[1];
...или lastIndexOf()
...
var file = path.substr(path.lastIndexOf('\') + 1);
показать путь работы со всеми ОС
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>