通过HTTP服务器发送HTML图像?

时间:2018-07-26 21:08:53

标签: java image networking server

我有一个Java服务器套接字(或http服务器,每个人都称它不同),并且我试图显示图像。现在,我只是使用图像托管网站,然后从那里链接它,但是我想知道是否可以通过连接发送图像?这是我的代码,只有一个类,

import java.io.File;
import java.io.IOEXception;
import java.new.ServerSocket;
import java.net.Socket;
import java.util.Scanner
public class main {
public static void main(String argumentsCanBeNamedAnything[]) throws 
IOException {
ServerSocket server = new ServerSocket(80);
System.out.println("Listening");
while(true) {
try(Socket socket = server.accept()) {
String daCode = "";
File file = new File("index.html");
Scanner sc = new Scanner(file);
while(sc.hasNextLine()) {
String i = sc.nextLine();
daCode+=i;
}
String httpResponse = "HTTP/1.1 200 OK\r\n\r\n" + daCode;
socket.getOutputStream().write(httpResponse.getBytes("UTF-8"));
}
}
}
}

我希望能够在与index.html相同的目录中拥有一个图像,然后能够发送该图像,因此我不必使用图像托管网站。任何想法都是一个好主意:)

1 个答案:

答案 0 :(得分:0)

您可以使用同一段代码处理所有文件。一旦具有从文件读取的输入流,则应将所有字节复制到套接字输出流。所以首先你 应该得到这样的输入流:

String filename = ...
File file = new File(filename);
InputStream input = new FileInputStream(file);

然后,您应该将输出流连接到套接字:

OutputStream output = socket.getOutputStream();

现在您可以像这样编写HTTP响应:

write(output, "HTTP/1.1 200 OK");
write(output, "\n\n");
copyAllBytes(input, output);

write方法如下:

void write(OutputStream output, String s) throws IOException {
    output.write(s.getBytes());
}

copyAllBytes看起来像这样:

void copyAllBytes(InputStream input, OutputStream output) throws IOException {
    byte[] buf = new byte[8192];
    int n;
    while ((n = input.read(buf)) != -1) {
        output.write(buf, 0, n);
    }
}

理想情况下,您还应该发送“ Content-Type”标头,以指示文档的性质和格式。标头也应写入套接字输出,这是一个简单的示例:

write(output, "HTTP/1.1 200 OK");
write(output, "\n");
write(output, "Content-Type: text/html; charset=utf-8");
write(output, "\n\n");
copyAllBytes(input, output);
相关问题