首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否通过http服务器发送Html图像?

是否通过http服务器发送Html图像?
EN

Stack Overflow用户
提问于 2018-07-27 05:08:53
回答 1查看 1.3K关注 0票数 0

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

代码语言:javascript
复制
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,然后能够发送该图像,这样我就不必使用一个图像托管网站。任何想法都是好主意:)

EN

回答 1

Stack Overflow用户

发布于 2018-07-27 10:09:40

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

代码语言:javascript
复制
String filename = ...
File file = new File(filename);
InputStream input = new FileInputStream(file);

然后你应该会得到一个连接到套接字的输出流:

代码语言:javascript
复制
OutputStream output = socket.getOutputStream();

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

代码语言:javascript
复制
write(output, "HTTP/1.1 200 OK");
write(output, "\n\n");
copyAllBytes(input, output);

write方法将如下所示:

代码语言:javascript
复制
void write(OutputStream output, String s) throws IOException {
    output.write(s.getBytes());
}

copyAllBytes将如下所示:

代码语言:javascript
复制
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“标头,指明文档的性质和格式。头部也应该写入套接字输出,下面是一个简单的例子:

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51547522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档