Saltar al contenido

No se puede abrir el archivo local – Chrome: no se permite cargar el recurso local

Hola usuario de nuestra página web, hallamos la respuesta a lo que buscas, has scroll y la obtendrás un poco más abajo.

Solución:

Sepa que esto es un poco viejo, pero vea muchas preguntas como esta …

Usamos mucho Chrome en el aula y es imprescindible para trabajar con archivos locales.

Lo que hemos estado usando es “Servidor web para Chrome”. Lo inicias, eliges la carpeta con la que deseas trabajar y vas a la URL (como 127.0.0.1:port que elegiste)

Es un servidor simple y no puede usar PHP, pero para un trabajo simple, podría ser su solución:

https://chrome.google.com/webstore/detail/web-server-for-chrome/ofhbbkphhbklhfoeikjpcbhemlocgigb

De acuerdo amigos, entiendo completamente las razones de seguridad detrás de este mensaje de error, pero a veces, necesitamos una solución … y aquí está la mía. Utiliza ASP.Net (en lugar de JavaScript, en el que se basó esta pregunta) pero con suerte será útil para alguien.

Nuestra aplicación interna tiene una página web donde los usuarios pueden crear una lista de accesos directos a archivos útiles distribuidos por nuestra red. Cuando hacen clic en uno de estos accesos directos, queremos abrir estos archivos … pero, por supuesto, el error de Chrome lo impide.

ingrese la descripción de la imagen aquí

Esta página web utiliza AngularJS 1.x para enumerar los distintos accesos directos.

Originalmente, mi página web intentaba crear directamente un elemento apuntando a los archivos, pero esto produjo el “Not allowed to load local resource“Error cuando un usuario hizo clic en uno de estos enlaces.


La solución fue reemplazar esos elementos con este código, para llamar a una función en mi controlador Angular …

sc.ShtCut_Name

La función en sí es muy simple …

$scope.OpenAnExternalFile = function (filename) 
    //
    //  Open an external file (i.e. a file which ISN'T in our IIS folder)
    //  To do this, we get an ASP.Net Handler to manually load the file, 
    //  then return it's contents in a Response.
    //
    var URL = '/Handlers/DownloadExternalFile.ashx?filename=' + encodeURIComponent(filename);
    window.open(URL);

Y en mi proyecto ASP.Net, agregué un archivo Handler llamado DownloadExternalFile.aspx que contenía este código:

namespace MikesProject.Handlers
{
    /// 
    /// Summary description for DownloadExternalFile
    /// 
    public class DownloadExternalFile : IHttpHandler
    
        //  We can't directly open a network file using Javascript, eg
        //      window.open("\SomeNetworkPathExcelFileMikesExcelFile.xls");
        //
        //  Instead, we need to get Javascript to call this groovy helper class which loads such a file, then sends it to the stream.  
        //      window.open("/Handlers/DownloadExternalFile.ashx?filename=//SomeNetworkPath/ExcelFile/MikesExcelFile.xls");
        //
        public void ProcessRequest(HttpContext context)
        
            string pathAndFilename = context.Request["filename"];               //  eg  "\SomeNetworkPathExcelFileMikesExcelFile.xls"
            string filename = System.IO.Path.GetFileName(pathAndFilename);      //  eg  "MikesExcelFile.xls"

            context.Response.ClearContent();

            WebClient webClient = new WebClient();
            using (Stream stream = webClient.OpenRead(pathAndFilename))
            
                // Process image...
                byte[] data1 = new byte[stream.Length];
                stream.Read(data1, 0, data1.Length);

                context.Response.AddHeader("Content-Disposition", string.Format("attachment; filename=0", filename));
                context.Response.BinaryWrite(data1);

                context.Response.Flush();
                context.Response.SuppressContent = true;
                context.ApplicationInstance.CompleteRequest();
            
        

        public bool IsReusable
        
            get
            
                return false;
            
        
    

Y eso es.

Ahora, cuando un usuario hace clic en uno de mis enlaces de acceso directo, llama al OpenAnExternalFile función, que abre este archivo .ashx, pasándole la ruta + nombre de archivo del archivo que queremos abrir.

Este código del controlador carga el archivo y luego devuelve su contenido en la respuesta HTTP.

Y, trabajo hecho, la página web abre el archivo externo.

¡Uf! Nuevamente, hay una razón por la que Chrome arroja esto “Not allowed to load local resources“excepción, así que tenga cuidado con esto … pero estoy publicando este código solo para demostrar que esta es una forma bastante simple de evitar esta limitación.

Solo un último comentario: la pregunta original quería abrir el archivo “C:02.jpg“. Usted hipocresía hacer esto. Su sitio web se ubicará en un servidor (con su propia unidad C:) y no tendrá acceso directo a la unidad C: de su usuario. Entonces, lo mejor que puede hacer es usar un código como el mío para acceder a archivos en algún lugar de una unidad de red.

1) Abra su terminal y escriba

npm install -g http-server

2) Vaya a la carpeta raíz en la que desea que le sirvan los archivos y escriba:

http-server ./

3) Lea la salida de la terminal, algo un poco http://localhost:8080 aparecerá.

Se permitirá obtener todo lo que esté allí. Ejemplo:

background: url('http://localhost:8080/waw.png');

Recuerda que tienes permiso de añadir un criterio verdadero .

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *