0

JavaScript - Получение имени файла и расширения из input type="file"

3

У меня есть поле для загрузки файла, и когда я нажимаю кнопку "Обзор" и выбираю файл, я хочу, чтобы имя файла и его расширение отображались в двух текстовых полях (см. пример кода).

С расширением все работает корректно, но имя файла также включает путь, что приводит к предупреждению о "фейковом пути".

Я понимаю, почему это происходит, но как можно получить только имя файла без пути? Мне путь не нужен.

Вот код, который я использую:

<input id='inputfile' type='file' name='inputfile' onChange='getoutput()'><br>
Output Filename <input id='outputfile' type='text' name='outputfile'><br>
Extension <input id='extension' type='text' name='extension'>
function getoutput(){
    outputfile.value = inputfile.value.split('.')[0];
    extension.value = inputfile.value.split('.')[1];
}

Как правильно извлечь только имя файла без его полного пути?

5 ответ(ов)

0

Вы можете использовать метод substring и lastIndexOf, чтобы сократить код:

let fileName = "profile.png";
let extension = fileName.substring(fileName.lastIndexOf('.') + 1);

Этот код эффективно извлекает расширение файла с использованием меньше строк.

0

Этот пост немного устарел, но для информации:

var files = event.target.files;
var filename = files[0].name;
var extension = files[0].type;

В extension вы найдете тип файла. Например, если это изображение в формате JPEG, то:

extension = image/jpeg

Или если это PDF, то:

extension = application/pdf

Чтобы получить только расширение, используйте extension.replace(/.*\//g, '');. Это вернет нужное значение.

0

Ваш код правильно извлекает расширение файла из пути, введенного в элемент с идентификатором inputFile. Однако, как вы правильно заметили, он может работать некорректно, если в имени файла есть несколько точек.

Если ваше имя файла, например, example.test.txt, то код вернет txt, что может быть не всегда желаемым поведением, особенно если вы хотите получить расширение самого файла.

Вместо этого вы можете рассмотреть возможность использования метода split для получения последнего элемента массива:

var filePath = $("#inputFile").val();
var file_ext = filePath.split('.').pop();
console.log("File Extension ->-> " + file_ext);

Этот подход всегда будет извлекать последнее расширение файла, независимо от того, сколько точек содержится в имени файла. Если вы хотите обработать случаи, когда файл может не иметь расширения, вы можете добавить дополнительную проверку:

var filePath = $("#inputFile").val();
var parts = filePath.split('.');
var file_ext = parts.length > 1 ? parts.pop() : ''; // Если расширение отсутствует, вернем пустую строку
console.log("File Extension ->-> " + file_ext);

Таким образом, ваш код будет более устойчивым к ситуациям со сложными файлами.

0

Для того чтобы получить имя файла и разделить его на различные части, выполните следующие шаги:

const media_file = event.target.files[0]; // event получен из события <input>
const filename = media_file.name;

let last_dot = filename.lastIndexOf('.'); // Находим последний индекс точки
let ext = filename.slice(last_dot + 1); // Получаем расширение файла
let name = filename.slice(0, last_dot); // Получаем имя файла без расширения

В этом коде мы сначала извлекаем файл из события ввода (<input>), затем находим его имя и определяем место последней точки, чтобы отделить расширение от самого имени файла. После чего с помощью slice можно получить как имя файла, так и его расширение.

0

Для получения расширения файла и его имени из объекта события можно использовать следующий код:

var files = event.target.files[0]; // Получаем первый файл из списка
var fileExtension = files.type.split("/").pop(); // Извлекаем расширение файла
var fileName = files.name; // Получаем имя файла

Этот код сначала обращается к объекту event, получает первый файл и разделяет его тип по символу "/". Затем с помощью pop() мы извлекаем последнее значение, которое и будет расширением файла. Имя файла можно получить напрямую через свойство name.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь