Funciona si el archivo html es local (en mi unidad C), pero no si el archivo html está en un servidor y el archivo de imagen es local. ¿Porqué es eso?
¿Alguna posible solución?
Funciona si el archivo html es local (en mi unidad C), pero no si el archivo html está en un servidor y el archivo de imagen es local. ¿Porqué es eso?
¿Alguna posible solución?
src=""
Respuestas:
Sería una vulnerabilidad de seguridad si el cliente pudiera solicitar archivos del sistema de archivos local y luego usar JavaScript para averiguar qué contienen.
La única forma de evitar esto es crear una extensión en un navegador. Las extensiones de Firefox y las extensiones de IE pueden acceder a los recursos locales. Chrome es mucho más restrictivo.
¿No debería usar "file: // C: /localfile.jpg" en lugar de "C: /localfile.jpg"?
Los navegadores no pueden acceder al sistema de archivos local a menos que acceda a una página html local. Tienes que subir la imagen a alguna parte. Si está en el mismo directorio que el archivo html, puede usar<img src="localfile.jpg"/>
C:
no es un esquema URI reconocido. Intente en su file://c|/...
lugar.
Honestamente, la forma más fácil era agregar alojamiento de archivos al servidor.
Abrir IIS
Agregar un directorio virtual en el sitio web predeterminado
Agregue los permisos apropiados a la carpeta en la unidad C: para "SERVICIO DE RED" y "IIS AppPool \ DefaultAppPool"
Actualizar sitio web predeterminado
Y tu estas listo. Ahora puede buscar cualquier imagen en esa carpeta navegando a http: //yourServerName/whateverYourFolderNameIs/yourImage.jpg y usar esa url en su img src
Espero que esto ayude a alguien
IE 9: Si desea que el usuario mire la imagen antes de publicarla en el servidor: El usuario debe AGREGAR el sitio web a la "lista de sitios web de confianza".
podemos usar FileReader () de javascript y su función readAsDataURL (fileContent) para mostrar el archivo de unidad / carpeta local. Enlaza el evento de cambio a la imagen y luego llama a la función showpreview de JavaScript. Prueba esto -
<!doctype html>
<html>
<head>
<meta charset='utf-8'>
<meta name='viewport' content='width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=no;'>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<title></title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript">
function showpreview(e) {
var reader = new FileReader();
reader.onload = function (e) {
$("#previewImage").attr("src", e.target.result);
}
//Imagepath.files[0] is blob type
reader.readAsDataURL(e.files[0]);
}
</script>
</head>
<body >
<div>
<input type="file" name="fileupload" value="fileupload" id="fileupload" onchange='showpreview(this)'>
</div>
<div>
</div>
<div>
<img width="50%" id="previewImage">
</div>
</body>
</html>
Dejando de lado la observación de Newtang sobre las reglas de seguridad, ¿cómo va a saber que cualquiera que vea su página tendrá las imágenes correctas c:\localfile.jpg
? No puedes. Incluso si piensa que puede, no puede. Presupone un entorno de Windows, por un lado.
Veo dos posibilidades para lo que estás intentando hacer:
¿Quiere que su página web, que se ejecuta en un servidor, encuentre el archivo en la computadora en la que lo diseñó originalmente?
¿Quiere que lo obtenga de la computadora que está viendo en la página?
La opción 1 simplemente no tiene sentido :)
La opción 2 sería un agujero de seguridad, el navegador prohíbe que una página web (servida desde la web) cargue contenido en la máquina del espectador.
Kyle Hudson te dijo lo que debes hacer, pero eso es tan básico que me cuesta creer que esto sea todo lo que quieres hacer.
si usa el navegador Google Chrome, puede usarlo así
<img src="E://bulbpro/pic_bulboff.gif" width="150px" height="200px">
Pero si usa Mozila Firefox, debe agregar "archivo" ex.
<img src="file:E://bulbpro/pic_bulboff.gif" width="150px" height="200px">
También debe cargar la imagen y luego vincularla a la imagen en el servidor.
¿Qué tal si la imagen es algo seleccionado por el usuario? Use una entrada: etiqueta de archivo y luego de seleccionar la imagen, ¿mostrarla en la página web del lado del cliente? Eso es factible para la mayoría de las cosas. En este momento estoy tratando de que funcione para IE, pero como con todos los productos de Microsoft, es una bifurcación de clúster ().
Si está implementando un sitio web local solo para usted o para ciertos clientes, puede solucionar esto ejecutando mklink /D MyImages "C:/MyImages"
en el directorio raíz del sitio web como administrador en cmd. Luego, en el html, haz <img src="MyImages/whatever.jpg">
y el enlace simbólico establecido por mklink conectará el enlace src relativo con el enlace en tu unidad C. Me resolvió este problema, por lo que puede ayudar a otros que se planteen esta pregunta.
(Obviamente, esto no funcionará para sitios web públicos ya que no puede ejecutar comandos cmd en las computadoras de las personas fácilmente)
Probé muchas técnicas y finalmente encontré una en el lado C # y el lado JS. No puede dar una ruta física al atributo src, pero puede dar la cadena base64 como src a la etiqueta Img. Veamos el siguiente ejemplo de código C #.
<asp:Image ID="imgEvid" src="#" runat="server" Height="99px"/>
Código C #
if (File.Exists(filepath)
{
byte[] imageArray = System.IO.File.ReadAllBytes(filepath);
string base64ImageRepresentation = Convert.ToBase64String(imageArray);
var val = $"data: image/png; base64,{base64ImageRepresentation}";
imgEvid.Attributes.Add("src", val);
}
Espero que esto ayude