para IE proporciona la ruta completa, solo necesita el nombre del archivo

Cuando realizo la carga desde el navegador IE, mi backend (org.apache.commons.fileupload) obtiene la ruta completa del archivo.

Para otros navegadores que no sean IE, obtiene el nombre del archivo y está bien por seguridad.

¿Cómo obtener el nombre de archivo solo desde la entrada para IE?

¿Es posible hacerlo en la interfaz de usuario, porque creo que no es muy elegante editar Apache lib?

Tal vez, algún parámetro existe para el campo de entrada?

Puedo hacerlo en el servidor, pero me interesa el enfoque de UI.

El objective de la entrada del archivo es proporcionar un archivo . Los nombres que vienen con él son “lo que sea que el proveedor del navegador quiera usar”, no se garantiza que tengan nada que ver con el nombre del archivo en el sistema de archivos.

No puedes cambiar lo que envía el navegador.

Si vas a utilizar el nombre enviado por el navegador, debes asegurarte de que sea válido para lo que sea que vayas a hacer con él (por ejemplo, asegúrate de que solo incluya los caracteres que están permitidos en los nombres de archivo en tu sistema de archivos) . Esto lo convierte en algo que debe manejarse en el servidor (al igual que cualquier otro dato suministrado por el cliente).

También hay una opción de IE en:

  • opciones de Internet
  • Pestaña de seguridad
  • En “Internet” o “Intranet”, haga clic en Nivel personalizado
  • En la configuración de seguridad desplácese hacia abajo hasta que vea “Incluir la ruta del directorio local al cargar archivos a un servidor” y desactívela.
  • Haga clic en Aceptar en la ventana Opciones de Internet y actualice.

Alex

Prueba esto en el lado del servidor

Path.GetFileName (file.FileName)

De hecho, hay una solución bastante fácil si está cargando con FormData a través de Xhr. La aplicación FormData.append le permite pasar el nombre del archivo como tercer argumento.

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

Está interesado en un enfoque de IU.
Puede agregar un campo de entrada oculto (o entrada JSON) que contenga solo el nombre de archivo, poblado por javascript.

Utilizando la siguiente función de JavaScript multiplataforma (incluido IE) / plataforma (tomada de mi respuesta aquí , con explicación y referencia completas), que solo obtiene el nombre de archivo:

 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]) || ''; } 
  

Parece fácil de manejar desde el lado del servidor, pero de acuerdo con los requisitos.

He probado esto en entorno de producción y funciona bien.

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

IE por defecto proporciona la ruta completa junto con el nombre del archivo, y causa problemas al cargar un archivo desde algún directorio compartido. agregar el fragmento anterior resolverá el problema y funciona bien en todos los casos.