2009-05-03 8 views
19

Historia completa: Estoy trabajando en un proyecto para mi empresa que requiere que los usuarios en cada una de nuestras ubicaciones carguen informes generados por un software de terceros. Todos los informes generados por este software siempre se colocan en el mismo directorio. Algunos de nuestros asociados menos informados en informática, a juzgar por la experiencia pasada (y continua) con una tarea similarmente difícil: descargar/guardar facturas en un directorio particular de un sitio web de proveedores, tendrán problemas para encontrar el directorio correcto desde donde cargar.controlar el directorio de trabajo para <input type = "file">?

Las computadoras en cada lugar están ejecutando Windows Server 2003 y actualmente tienen IE6

Nos gustaría aumentar la facilidad de uso y el cumplimiento mediante el establecimiento de las entradas de archivos para que apunte al directorio correcto por defecto.

Inicialmente esperaba poder establecer los archivos directamente en los valores de entrada, pero esto está por buenas razones deshabilitado en la mayoría de los navegadores. ¿Es posible a través de javascript, o simplemente en el propio HTML, controlar el directorio que se abre cuando el usuario presiona el botón Examinar?

Si no, ¿qué otras sugerencias sobre cómo lograrlo? Incluso algo tan simple como una forma de establecer con éxito un acceso directo en el escritorio que obligará al navegador a usar el directorio de trabajo requerido. (IE aparentemente ignora el parámetro 'inicio en' de accesos directos)

Respuesta

12

No se puede controlar el contenido de una entrada de archivo usando JavaScript por razones de seguridad. De lo contrario, podría crear un formulario oculto con un campo de entrada de archivo, establecerlo en una ruta y enviar el formulario con JavaScript para cargar el archivo a su servidor sin el conocimiento del usuario.

Desafortunadamente, no conozco una forma de establecer la ruta predeterminada para el selector de archivos. Si hay uno, estoy seguro de que será específico del navegador y solo se puede usar configurando alguna opción en el lado del cliente, no a través de HTML o JavaScript.

1

IE usa la última carpeta elegida para subir archivos. Si tienes control sobre las computadoras cliente, mis consejos son; asignar una letra de unidad a la carpeta donde se encuentran los archivos. Esto se puede hacer fácilmente usando un archivo cmd puesto en el subst de llamada de carga automática. Luego, solicite a los usuarios que ingresen manualmente la letra de la unidad, ya que es muy corta, ya que es posible escribir una instrucción muy clara y fácil de seguir. Buena suerte.

0

No se puede establecer el valor de un archivo de entrada, es un problema de seguridad.

Puede usar un control activex, aunque esas cosas están saliendo bastante anticuadas. Hay muchos controles avanzados de carga de archivos y apuesto a que puedes elegir uno bastante barato.

configuración de registro de directorio de descarga puede hacer el truco: (a pesar de que su un proceso de carga) y usted tendría que encontrar la manera de ponerlo cada vez que abren IE

HKCU\Software\Microsoft\Internet Explorer\DownloadDirectory 
3

Una rápida búsqueda en Google resultó en JUpload - una fuente abierta firmada applet de Java que parece satisfacer todas sus necesidades: sitio http://jupload.sourceforge.net/

demostración: http://jupload.sourceforge.net/advanced_js_demo.html

estoy seguro de que hay otras muchas applets de Java a cabo la re y probablemente no sería demasiado difícil de hacer tu propio.

La única otra opción que se me ocurre es una aplicación de carga de escritorio.

+0

java es un poco invasivo ¿no crees? Hay muchos controles activex y controles de carga instantánea que elegiría antes de tener que instalar un runtime de 100MB + que aspire recursos nativos, etc. –

+1

Los controles de carga flash tampoco lo cortarán, siguen las mismas reglas de seguridad que el HTML básico - Nombres de archivos y extensiones solo Tiene razón acerca de la huella de Java, pero estoy tan reacio a utilizar un control ActiveX y/o hacks de registro. Llámeme prejuicioso, supongo, pero me decantaré por Java/SO independiente del navegador/OS y el control ActiveX ejecutándose en IE cualquier día: P – brianpeiris

0

Esto funciona. Aquí tenía que asegurarme de que el usuario haya utilizado el archivo de imagen de entrada en la ruta de la imagen local del cliente. El UrlExists comprueba si el archivo se puede cargar a la ruta conocida + nombre de archivo. También necesitaba hacer que la entrada se viera mejor que los navegadores. El truco aquí fue colocar lienzo con más trabajo del que se muestra aquí para enmascarar la entrada. Estableciendo la opacidad de entrada en 0, aquí se establece en 0.5 para que pueda ver el truco.

<body> 
    <canvas id="FancyCanvasButton" tabindex="8" width="240" height="18" style="position: absolute; left: 100px; top: 120px; border: 1px solid rgb(0, 0, 0); z-index: 1;"></canvas> 
    <input type="file" accept="image/*" onchange="loadFile(event)" style="opacity:0.5;position: absolute; left: 100px; top: 120px; z-index: 2; " > 
    <img id="output"/> 
<script> 
var loadFile = function(event) { 
    var output = document.getElementById('output'); 
    var fName= "Images/" + event.target.files[0].name; //None path with users selected file name 
    if(UrlExists(fName)){ 
    output.src=fName;   //Do something like show image 
    }else{ 
    alert("File not present"); // Do something to show file not in this path 
    } 
}; 

function UrlExists(url) { 
    var http = new XMLHttpRequest(); 
    http.open('HEAD', url, false); 
    http.send(); 
    if (http.status != 404){ 
     return true; 
    }else{ 
     return false; 
    } 
    } 

    </script> 
+0

var fName debería tener una ruta conocida con nombre de archivo de usuario mis comentarios dicen "Ninguno" no "conocido" –

+0

No hace lo que hace la pregunta, por lo que no funciona ... – IamGuest

1

En pocas palabras, es imposible hacer eso. Como puede ver, todas/la mayoría de las respuestas concuerdan con esta afirmación, y las que no malinterpretan la pregunta. Lo siento, pero lo que intentan hacer es considerado un riesgo de seguridad para la mayoría de los navegadores.

Cuestiones relacionadas