服务器发送html但没有图像到浏览器HTTP

时间:2018-04-23 22:32:13

标签: java http sys

这段代码加载我的html,但它不会在html中加载我的jpgs,当我运行代码时,似乎它正在工作,所有字节都是为每个图像发送的,但它们没有显示在我的浏览器中。我应该使用DataOutputStream发送字节,但也许这就是问题?我真的迷失了,并且对网络编程很陌生。

    public void run(){

        System.out.println("CLIENT THREAD STARTING");

        String req = "";

        if(clientIn.hasNextLine()){
            req = clientIn.nextLine();
            System.out.println("Header: " + request);
        }

        PrintWriter toClient = null;

        try {
            toClient = new PrintWriter(sock.getOutputStream());
        } catch (IOException e2) {
            e2.printStackTrace();
        }

        //only sends files if client requests them
        if(request.contains("GET")){

            req = req.substring(request.indexOf("/") + 1);
            String name = req.substring(0, req.indexOf(" "));



            String type = "";

            if(name.contains(".jpg")){
                type = "text/html";
            }
            else if(name.contains(".html")){
                type = "image/jpeg";
            }

            File theFile = new File(fileName);  
            FileInputStream fileIn = null;

            try{
                fileIn = new FileInputStream(fileName);
            }catch(FileNotFoundException e){
                toClientText.println("404");
                toClientText.flush();
                System.exit(-1);
            }   

            System.out.println("File name " + name);

            toClientText.println("HTTP/1.1 200 OK");
            toClientText.println("Connection: closed");
            toClientText.println("Content-Length: " + theFile.length());
            toClientText.println("Content-Type: " + type);
            toClientText.println("\n");
            toClientText.flush();

            DataOutputStream dataStream = null;

            try {
                dataStream = new DataOutputStream(sock.getOutputStream());
            } catch (IOException e1) {
                e1.printStackTrace();
            }

            byte[] send = new byte[1024] ;

            try {
                while ((fin.read(send)) != -1 ) {

                    toClientData.write(send);
                    toClientData.flush();
                }

                toClientData.close();

                fin.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        else{
            toClientText.println("Bad Request 400");
            toClientText.flush();
        }
    }

1 个答案:

答案 0 :(得分:2)

toClientText.println("Content-Type: " + fileType);
toClientText.println("\n");

这将在标题和文件数据之间创建3个换行符,因此您的浏览器会认为第三个换行符是图像的一部分,这会破坏图像。

此外,即使所有浏览器都能处理\n换行符,请注意标准要求\r\n换行符,而不是\n

这应该有效:

toClientText.println("Content-Type: " + fileType);
toClientText.println();