2011-12-23 158 views
19

Necesito mostrar el nombre del archivo seleccionado actualmente (en el elemento <input type="file">).Escape de barra invertida en cadena - Javascript

Todo está bien, el único problema es que estoy obteniendo este tipo de cadena "C: \ fakepath \ typog_rules.pdf" (browset automáticamente pone esto como valor para el elemento de entrada).

Cuando intento dividir la cadena entre '\' o '\\', falla debido a las barras no cortadas. Los intentos de unir/reemplazar barras también falla. ¿Hay alguna forma de evitar esto? Necesito que esto funcione al menos en Opera e IE (porque en otros navegadores puedo usar FileReader)

E.G. Obtengo "C: \ fakepath \ typog_rules.pdf" como entrada y quiero obtener "typog_rules.pdf" como salida.

+0

nos muestras el código y el error que estas obteniendo? – ean5533

Respuesta

20

Por razones de seguridad, no es posible conseguir el verdadero camino, lleno de un archivo, referida a través de un elemento <input type="file" />.

This question ya menciona y enlaces a otras preguntas sobre desbordamiento de pila con respecto a este tema.


Respuesta anterior, guardada como referencia para los futuros visitantes que lleguen a esta página a través del título, las etiquetas y la pregunta.
Se debe evitar la barra diagonal inversa.

string = string.split("\\"); 

En JavaScript, la barra invertida se utiliza para escapar caracteres especiales, como saltos de línea (\n). Si desea utilizar una barra invertida literal, se debe usar una barra diagonal inversa doble.

Por lo tanto, si desea hacer coincidir dos barras diagonales inversas, se deben utilizar cuatro barras diagonales inversas. Por ejemplo, alert("\\\\") mostrará un cuadro de diálogo que contiene dos barras diagonales inversas.

+0

No fue útil. No puede controlar qué navegador le da como valor [archivo] de entrada. "C: \ fakepath \ typog_rules.pdf" .split ("\\"); => ["C: akepath ypog_rules.pdf"] – Max

+0

@ user1113690 ¿Qué es lo que quieres? Dividir '" C: \\ fake \\ path \\ file "' in '[" C: "," fake "," path "," file "]'? Debe aclarar su pregunta y agregar la salida actual, la entrada real, la salida esperada y el código relevante. –

+0

Obtengo "C: \ fakepath \ typog_rules.pdf" como entrada y quiero obtener "typog_rules.pdf" como salida. – Max

3

Huida de la barra diagonal inversa.

foo.split('\\') 
+0

Vaya, no estoy seguro si este es el problema. Parece que el OP ya lo intentó (estaba viendo el origen de la pregunta y la edité para mostrarla claramente) – sidyll

4

Creo que esto está más cerca de la respuesta que está buscando:

<input type="file"> 

$file = $(file); 
var filename = fileElement[0].files[0].name; 
+0

Si tengo una cadena como esta "FILEUPLOADS \ city_sri \ src \ com \ travelocityapp22 \ commonmodule \ dto" entonces cómo dividirlas usando '\' – Sridhar

0

Añadir un id de entrada al elemento y hacer algo como lo siguiente:

document.getElementById('inputId').value.split(/[\\$]/).pop() 
Cuestiones relacionadas