URL del archivo “No se permite cargar el recurso local” en el navegador de Internet

Tengo un gran rompecabezas.

Quiero abrir un archivo en ASP clásico. Estoy usando varias variables porque las cosas pueden cambiar pero el resultado es correcto. Lo sé porque probé el resultado al copiar el linkadress y colocarlo en mi URL. Ahora el problema: si hago clic en mi enlace, no hace nada. No es una actualización, no una redirección. nada. ¿Alguien sabe lo que hice mal?

Ok aquí está el trato. Mi archivo no siempre es local, depende del entorno en el que estoy. Si copio y pego el resultado de mi url, se descarga. Si hago clic en mi URL, no responde. ¿Algunas ideas? ¿Problema del navegador? (aunque he probado 5 navegadores) ¿O algo más? Estoy realmente atrapado aquí y el internet no parece estar de mi lado.

Tengo 3 ambientes. Las variables debajo aquí son para que el enlace funcione. Sé que el enlace funciona porque lo he probado copiando. Y sí, comienza con file:/// y sí, estoy seguro de que el enlace es correcto.

Aquí está mi línea de código:

 response.write("Click here") 

EDITAR: Captura de pantalla con error / resultado del enlace

error

Ahora sabemos cuál es el error real que puede formular una respuesta.

No se permite cargar recursos locales

es una excepción de seguridad integrada en Chrome y otros navegadores modernos. La redacción puede ser diferente, pero de alguna forma o forma, todos tienen excepciones de seguridad para lidiar con este escenario.

En el pasado, usted podía anular ciertas configuraciones o aplicar ciertos indicadores, como

 --disable-web-security --allow-file-access-from-files --allow-file-access

en Chrome (Consulte https://stackoverflow.com/a/22027002/692942 )

Está ahí por una razón

En este punto, sin embargo, vale la pena señalar que estas excepciones de seguridad existen por una buena razón y tratar de eludirlas no es la mejor idea.

Hay otra manera

Como ya tiene acceso a la ASP clásica, siempre puede crear una página intermedia que sirva a los archivos basados ​​en la red. Lo hace utilizando una combinación del objeto ADODB.Stream y el método Response.BinaryWrite() . Hacer esto garantiza que las ubicaciones de los archivos de red nunca se expongan al cliente y, debido a la flexibilidad del script, se puede usar para cargar recursos desde múltiples ubicaciones y múltiples tipos de archivos.

Aquí hay un ejemplo básico ( getfile.asp ) ;

 <% Option Explicit Dim s, id, bin, file, filename, mime id = Request.QueryString("id") 'id can be anything just use it as a key to identify the 'file to return. It could be a simple Case statement like this 'or even pulled from a database. Select Case id Case "TESTFILE1" 'The file, mime and filename can be built-up anyway they don't 'have to be hard coded. file = "\\server\share\Projecten\Protocollen\346\Uitvoeringsoverzicht.xls" mime = "application/vnd.ms-excel" 'Filename you want to display when downloading the resource. filename = "Uitvoeringsoverzicht.xls" 'Assuming other files Case ... End Select If Len(file & "") > 0 Then Set s = Server.CreateObject("ADODB.Stream") s.Type = adTypeBinary 'adTypeBinary = 1 See "Useful Links" Call s.Open() Call s.LoadFromFile(file) bin = s.Read() 'Clean-up the stream and free memory Call s.Close() Set s = Nothing 'Set content type header based on mime variable Response.ContentType = mime 'Control how the content is returned using the 'Content-Disposition HTTP Header. Using "attachment" forces the resource 'to prompt the client to download while "inline" allows the resource to 'download and display in the client (useful for returning images 'as the "src" of a  tag). Call Response.AddHeader("Content-Disposition", "attachment;filename=" & filename) Call Response.BinaryWrite(bin) Else 'Return a 404 if there's no file. Response.Status = "404 Not Found" End If %> 

Este ejemplo está pseudocodificado y, como tal, no ha sido probado.

Este script se puede usar en como este para devolver el recurso;

 Click Here 

El podría llevar este enfoque más allá y considerar (especialmente para archivos más grandes) leer el archivo en fragmentos utilizando Response.IsConnected para verificar si el cliente todavía está allí y en la propiedad s.EOS para verificar el final del flujo mientras se leen los fragmentos. . También podría agregar a los parámetros de la cadena de consulta para establecer si desea que el archivo regrese en línea o que se descargue.


Enlaces útiles

  • Uso de METADATA para importar las constantes DLL : si tiene problemas para adTypeBinary , siempre es mejor que codificar por adTypeBinary 1 .

  • Content-Disposition: ¿Cuáles son las diferencias entre “inline” y “attachment”? – Información útil sobre cómo se comporta Content-Disposition en el cliente.

A las personas no les gusta modificar las opciones de seguridad de Chrome, simplemente podemos iniciar un servidor http python desde el directorio que contiene su archivo local:

 python -m SimpleHTTPServer 

y para Python 3:

 python3 -m http.server 

Ahora puede acceder a cualquier archivo local directamente desde su código js o externamente con http://127.0.0.1:8000/some_file.txt

Deberá proporcionar un enlace a su archivo al que se pueda acceder a través del navegador, por ejemplo:

  

versus

  

Si expone su carpeta “Projecten” directamente al público, entonces solo debe proporcionar el enlace como tal:

  

Pero cuidado, sus archivos pueden ser indexados por los motores de búsqueda, cualquier persona que tenga este enlace puede acceder a ellos, etc.

No me di cuenta por su pregunta original que estaba abriendo un archivo en la máquina local, pensé que estaba enviando un archivo desde el servidor web al cliente.

Según su captura de pantalla, intente formatear su enlace de la siguiente manera:

 Klik hier 

(sin conocer el contenido de cada una de las variables de tu juego de registros, no puedo darte el código ASP exacto)