2011-02-05 14 views
12

Necesito mostrar una imagen en la página web sin subirla. algo así como¿Cómo mostrar la imagen local en la página web?

<img id="RuPic" src="file://localhost/D:/folder/image.jpg"/> 

¿Cómo hacer eso?

+4

Basta con retirar el 'localhost /' y usted debe ser bueno para ir. –

+1

@Pekka: el navegador accederá al D: unidad del cliente? –

+1

@John yup, en el contexto de una imagen esto debería funcionar bien. (IIRC, existen restricciones para los iframes locales por razones de seguridad, y por supuesto, nunca se pueden analizar los documentos locales debido a la Política de mismo origen, pero las imágenes deberían estar bien.) –

Respuesta

-2

De acuerdo, no puede dejar que otra persona acceda a su sistema de archivos local. Necesitarías un servicio de servidor como Apache, deja que tu computadora funcione 24 horas al día, asegúrate de que no se sobrecaliente, cuida la seguridad y mucho más para que eso sea posible. Y debido a que la administración del servidor es costosa y consume mucho tiempo, la mayoría de la gente deja que el anfitrión del programa tenga nuestras cosas para nosotros (alojamiento web).

En conclusión, si no desea ejecutar su propio servidor, es mucho más fácil simplemente cargarlo a su webhoster de elección.

+0

-1: eso realmente no responde a la pregunta (a pesar de ser cierto) –

+0

Probablemente habría sido más adecuado como un comentario ... :) – anroesti

+0

He interpretado la pregunta de la misma manera que él lo hizo, porque el asker dijo "sin subirlo". – ClosureCowboy

4

La vinculación a archivos de imágenes locales desde archivos HTML remotos solía ser posible, pero ya no es así.

  • En Firefox desde la versión 1.5 (fondo y la configuración de las opciones here)

  • En Internet Explorer I creo desde la Versión 8 (creo que he hecho esto con éxito en IE 7, pero puedo' t encontrar datos duros)

  • En Chrome, probablemente, desde siempre

Ver por ejemplo this vulnerability report para saber por qué esto es algo bueno.

No creo que haya una solución. Solo tendrá que cargar la imagen primero.

0

Debe hacer una forma de responder solicitudes de archivos y mover sus archivos cerca del origen de su proyecto. luego haga su dirección relativa. Este es mi código que funciona bien para mí:

package ir.cclever.example; 

import java.awt.List; 
import java.io.BufferedReader; 
import java.io.DataOutputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.io.PrintWriter; 
import java.net.ServerSocket; 
import java.net.Socket; 
import java.util.ArrayList; 
import java.util.Date; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class WellCloseWebServer { 

    public class clientInfo{ 
     public String ip; 
     public Date visitTime; 
    } 

    static ArrayList<clientInfo> clients = new ArrayList<clientInfo>(); 

    public void start() throws IOException { 
     ServerSocket listener = new ServerSocket(8181,1000); 
     System.out.println("Webserver starting up on port 8181"); 
     System.out.println("Waiting for connection"); 

     //==========================regex 
     String pathRegex = "(?<=GET /).+?(?= HTTP)"; 

     Pattern pathPattern = Pattern.compile(pathRegex); 
     //==========================/regex 

     try { 
      while (true) { 
       Socket socket = listener.accept(); 
       BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 

       String wholeRequest = ""; 
       String line; 

       String requestHeaders = in.readLine(); 
       wholeRequest = wholeRequest.concat(requestHeaders + "\n<br>"); 

       while(!(line = in.readLine()).equals("")){ 
        wholeRequest = wholeRequest.concat(line + "\n<br>"); 
       } 

       wholeRequest = wholeRequest.concat("\n<br/>\n<br/>\nClient IP Address : " + socket.getRemoteSocketAddress().toString()); 
       wholeRequest = wholeRequest.concat("\n<br/>\n<br/>\nClient Opened Port : " + ((Integer)socket.getPort()).toString()); 

       clientInfo newClient = new clientInfo(); 
       newClient.ip = socket.getRemoteSocketAddress().toString(); 
       newClient.visitTime = new Date(); 
       clients.add(newClient); 

       Matcher pathMatcher = pathPattern.matcher(requestHeaders); 

       Boolean anyPath = pathMatcher.find(); 

       System.out.println("Connection, sending data to request : " + requestHeaders); 
       try { 
        PrintWriter out = new PrintWriter(socket.getOutputStream(), true); 
        DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); 
        if (!anyPath) { 
         JustHello(out); 
        } 
        else { 
         String directory = pathMatcher.group(); 

         System.out.println(directory); 

         if (directory.toString().equals("pic")) { 
          JustPic(out); 
         } 
         else if(directory.toString().startsWith("server/")){ 
          getFile(directory,dos,true); 
         } 
         else if(directory.toString().endsWith("jpg")){ 
          getFile(directory,dos,false); 
         } 
         else if(directory.toString().equals("my.aspx")){ 
          mirror(out,wholeRequest); 
         } 
         else if(directory.toString().equals("clients.html")){ 
          WholeClients(out); 
         } 
         else{ 
          errorPage(out); 
         } 
        } 
       } catch (Exception e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } finally { 
        socket.close(); 
       } 
      } 
     } 
     finally { 
      listener.close(); 
     } 
    } 

    private void InvalidRequestMethod(PrintWriter out, String string) { 
     // TODO Auto-generated method stub 
     out.println("HTTP/1.0 404 NOT FOUND"); 
     out.println("Content-Type: text/html"); 
     out.println("Server: Bot"); 
     // this blank line signals the end of the headers 
     out.println(""); 
     out.flush(); 
     // Send the HTML page 
     out.print("<!DOCTYPE html>\n<html>\n<head>\n<title>Just GET</title>\n<meta charset=\"UTF-8\">\n</head>\n<body>\nInvalid request mehtod! : "+ string +"\n</body>\n</html>"); 
     out.flush(); 
    } 

    private void errorPage(PrintWriter out) { 
     // TODO Auto-generated method stub 
     out.println("HTTP/1.0 404 NOT FOUND"); 
     out.println("Content-Type: text/html"); 
     out.println("Server: Bot"); 
     // this blank line signals the end of the headers 
     out.println(""); 
     out.flush(); 
     // Send the HTML page 
     out.print("<!DOCTYPE html>\n<html>\n<head>\n<title>Error 404 NOT FOUND!</title>\n<meta charset=\"UTF-8\">\n</head>\n<body>\nContent not found on server!\n</body>\n</html>"); 
     out.flush(); 
    } 

    private void WholeClients(PrintWriter out) { 
     // TODO Auto-generated method stub 
     out.println("HTTP/1.0 200 OK"); 
     out.println("Content-Type: text/html"); 
     out.println("Server: Bot"); 
     // this blank line signals the end of the headers 
     out.println(""); 
     out.flush(); 
     // Send the HTML page 
     out.print("<!DOCTYPE html>\n<html>\n<head>\n<title>Whole Clients</title>\n<meta charset=\"UTF-8\">\n</head>\n<body>\n"); 
     Integer i=0; 
     for (clientInfo item : clients) { 
      i++; 
      out.print("<br/>\n"+i.toString()+") ip : " + item.ip + " | visit time : " + item.visitTime.toString()); 
     } 
     out.print("\n</body>\n</html>"); 
     out.flush(); 
    } 

    private void mirror(PrintWriter out, String requestHeaders) { 
     // TODO Auto-generated method stub 
     out.println("HTTP/1.0 200 OK"); 
     out.println("Content-Type: text/html"); 
     out.println("Server: Bot"); 
     // this blank line signals the end of the headers 
     out.println(""); 
     out.flush(); 
     // Send the HTML page 
     out.print("<!DOCTYPE html>\n<html>\n<head>\n<title>My Info</title>\n<meta charset=\"UTF-8\">\n</head>\n<body>\n" + 
       requestHeaders.toString() + 
       "\n</body>\n</html>"); 
     out.flush(); 
    } 

    private void getFile(String directory, DataOutputStream os, boolean b) { 
     String CRLF = "\r\n"; 
     // Open the requested file. 
     String fileName = directory; 
     FileInputStream fis = null; 
     boolean fileExists = true; 
     try { 
     //(new File(fileName)).mkdirs(); 
     fis = new FileInputStream(fileName); 
     } catch (FileNotFoundException e) { 
     fileExists = false; 
     } 

     // Construct the response message. 
     String statusLine = null; 
     String contentTypeLine = null; 
     String entityBody = null; 
     if (fileExists) { 
     statusLine = "200 OK" + CRLF; 
     contentTypeLine = "Content-type: " + 
       contentType(fileName) + CRLF; 
     } else { 
     statusLine = "404 NOT FOUND" + CRLF; 
     contentTypeLine = "Content Not Found!" + CRLF; 
     entityBody = "<HTML>" + 
      "<HEAD><TITLE>Not Found</TITLE></HEAD>" + 
      "<BODY>Not Found</BODY></HTML>"; 
     } 

     // Send the status line. 
     try { 
      if (b) { 
       os.writeBytes(statusLine); 
       // Send the content type line. 
       os.writeBytes(contentTypeLine); 
       // Send a blank line to indicate the end of the header lines. 
       os.writeBytes(CRLF); 
      } 
      // Send the entity body. 
      if (fileExists) { 
      sendBytes(fis, os); 
      fis.close(); 
      } else { 
      os.writeBytes("File DNE: Content Not Found!"); 
      } 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

    private static String contentType(String fileName) { 
     if(fileName.endsWith(".htm") || fileName.endsWith(".html")) { 
      return "text/html"; 
     } 
     if(fileName.endsWith(".jpeg") || fileName.endsWith(".jpg")) { 
     return "image/jpeg"; 
     } 
     if(fileName.endsWith(".gif")) { 
     return "image/gif"; 
     } 
     if(fileName.endsWith(".png")) { 
      return "image/png"; 
      } 
     if(fileName.endsWith(".js")) { 
      return "text/javascript"; 
      } 
     if(fileName.endsWith(".css")) { 
      return "text/stylesheet"; 
      } 

     return "application/octet-stream"; 
     } 

    private static void sendBytes(FileInputStream fis, OutputStream os) 
     throws Exception { 
     // Construct a 1K buffer to hold bytes on their way to the socket. 
     byte[] buffer = new byte[1024]; 
     int bytes = 0; 

     // Copy requested file into the socket's output stream. 
     while((bytes = fis.read(buffer)) != -1) { 
      os.write(buffer, 0, bytes); 
      } 
     } 

    private void JustHello(PrintWriter out) { 
     // TODO Auto-generated method stub 
     out.println("HTTP/1.0 200 OK"); 
     out.println("Content-Type: text/html"); 
     out.println("Server: Bot"); 
     // this blank line signals the end of the headers 
     out.println(""); 
     out.flush(); 
     // Send the HTML page 
     out.print("<!DOCTYPE html>\n<html>\n<head>\n<title>Just Hello</title>\n<meta charset=\"UTF-8\">\n</head>\n<body>\nHello World\n</body>\n</html>"); 
     out.flush(); 
    } 

    private void JustPic(PrintWriter out) { 
     // TODO Auto-generated method stub 
     out.println("HTTP/1.0 200 OK"); 
     out.println("Content-Type: text/html"); 
     out.println("Server: Bot"); 
     // this blank line signals the end of the headers 
     out.println(""); 
     out.flush(); 
     // Send the HTML page 
     out.print("<!DOCTYPE html>\n<html>\n<head>\n<title>Just Pic</title>\n<meta charset=\"UTF-8\">\n</head>\n<body>\n<img src=\"/images/th.jpg\"/>\n</body>\n</html>"); 
     out.flush(); 
    } 
} 

ver si la cláusula que responde a las peticiones que empiezan con/servidor. siga el código donde maneja la solicitud. devuelve los archivos como un transportador de archivos. por lo que la dirección aquí "server/image.jpg" será una dirección que proporcione en programación regular en java. esta dirección es de la raíz de su proyecto. mencionan que este código debe tener un principal para usar la clase. esto funciona perfecto para mí.

8

Puede hacerlo fácilmente usando FileReader.readAsDataURL(). El usuario elige una imagen y puede visualizarla sin necesidad de cargarla.

Para más información ver https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsDataURL

Aquí está el código:

function previewFile() { 
 
    // Where you will display your image 
 
    var preview = document.querySelector('img'); 
 
    // The button where the user chooses the local image to display 
 
    var file = document.querySelector('input[type=file]').files[0]; 
 
    // FileReader instance 
 
    var reader = new FileReader(); 
 

 
    // When the image is loaded we will set it as source of 
 
    // our img tag 
 
    reader.onloadend = function() { 
 
     preview.src = reader.result; 
 
    } 
 

 
    
 
    if (file) { 
 
     // Load image as a base64 encoded URI 
 
     reader.readAsDataURL(file); 
 
    } else { 
 
     preview.src = ""; 
 
    } 
 
    }
<input type="file" onchange="previewFile()"><br> 
 
    <img src="" height="200" alt="Image preview...">

Cuestiones relacionadas