Подтвердить что ты не робот

<input type = 'file> для IE дает полный путь, требуется только имя файла

Когда вы выполняете загрузку из браузера IE, мой бэкэнд (org.apache.commons.fileupload) получает полный путь к файлу.

Для других браузеров, отличных от IE, он получает имя файла, и он в порядке из-за безопасности.

Как получить имя_файла только из ввода для IE?

Возможно ли это сделать в пользовательском интерфейсе, потому что я считаю, что не очень грациозно редактировать apache lib.

Может быть, существует какой-то параметр для поля ввода?

Я могу сделать это на сервере, но заинтересован в подходе к пользовательскому интерфейсу.

4b9b3361

Ответ 1

Точкой входа файла является предоставление файла. Имена, которые поставляются вместе с ним, "независимо от того, что разработчик браузеров чувствует, как использование", они не гарантируют никакого отношения к имени файла в файловой системе вообще.

Вы не можете изменить то, что отправляет браузер.

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

Ответ 2

В IE есть также опция IE:

  • Свойства обозревателя
  • вкладка "Безопасность"
  • В "Интернет" или "Интранет" нажмите "Пользовательский уровень"
  • В настройках безопасности прокрутите страницу вниз, пока не увидите "Включить путь к локальному каталогу при загрузке файлов на сервер" и отключите его.
  • Нажмите "ОК" в окне "Свойства обозревателя" и обновите его.

Алекс

Ответ 3

Попробуйте это на стороне сервера:

Path.GetFileName(file.FileName)

Ответ 4

На самом деле существует довольно простой обходной путь, если вы загружаете с помощью FormData через Xhr. API-интерфейс FormData.append позволяет передавать имя файла в качестве третьего аргумента.

const formData = new FormData();
//explicitly setting the file name works in IE 11
formData.append('file', file, file.name);

Ответ 5

Вас интересует подход к пользовательскому интерфейсу.
Вы можете добавить скрытое поле ввода (или запись JSON), содержащее только готое имя файла, заполненное javascript.

Используя следующую кросс-браузерную функцию (включая IE)/platform javascript (взятую из мой ответ здесь, с полным объяснением и ссылкой), который получает только имя файла:

function extractFilename(s){ 
  // returns string containing everything from the end of the string 
  //   that is not a back/forward slash or an empty string on error
  //   so one can check if return_value===''
  return (typeof s==='string' && (s=s.match(/[^\\\/]+$/)) && s[0]) || '';
} 
<input type="file" onchange="alert(extractFilename(this.value));">

Ответ 6

Кажется, что это легко сделать со стороны сервера, но на основе требований.

Я проверил это в производстве ENV и работает нормально.

String fileName = file.getName();
if (fileName != null) {
    fileName = FilenameUtils.getName(fileName);
}

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

Ответ 7

если вы публикуете по xhr, вы можете просто указать имя файла

post look like this