Java-HTTPServer中的图像响应
我有一个java的web服务器,如下所示:Java-HTTPServer中的图像响应,java,image,httpserver,Java,Image,Httpserver,我有一个java的web服务器,如下所示: public static void main(String[] args) throws Exception { HttpServer server = HttpServer.create(new InetSocketAddress(80), 0); server.createContext("/", new HomeHandler()); server.setExecutor(null); // creates a default
public static void main(String[] args) throws Exception {
HttpServer server = HttpServer.create(new InetSocketAddress(80), 0);
server.createContext("/", new HomeHandler());
server.setExecutor(null); // creates a default executor
server.start();
}
这是家庭处理程序:
class HomeHandler implements HttpHandler {
public void handle(HttpExchange t) throws IOException {
String filepath = "C:\\Public\\home.html";
String response = getPage(filepath);
t.sendResponseHeaders(200, response.length());
OutputStream os = t.getResponseBody();
os.write(response.getBytes());
os.close();
}
}
最后是函数getPage()
:
但当我的主页加载时,它有一个图像,因此浏览器向我的服务器发出另一个图像请求,我为图像创建了一个类似的处理程序,它做同样的事情,即调用函数getPage(),将图像的文件路径作为参数传入
但当它在浏览器中实际运行时,它不会显示图像。但是,当我在新标签中单独打开图像时,它正确地显示了图像的大小(Google Chrome是我的浏览器,是今天最新的一款)图像是二进制数据,不能通过
字符串传递(不能存储/产生特定的字节序列)。因此直接使用字节[]
。最好设置响应类型内容类型:application/jpeg
或png
或gif
另外,您的代码使用的是平台的编码。对于指定的编码,请使用通用Unicode:
getBytes() // Platform dependant
getBytes("UTF-8") // Specified
new FileReader(file) // Platform dependant
new InputStreamReader(new FileInputStream(file),) // Platform dependant
new InputStreamReader(new FileInputStream(file), "UTF-8") // Specified
new FileWriter(file) // Platform dependant
new OutputStreamWriter(new FileOutputStream(file)) // Platform dependant
new OutputStreamWriter(new FileOutputStream(file), "UTF-8") // Specified
byte[] bytes;
new String(bytes) // Platform dependant
new String(bytes, "UTF-8") // Specified
下面介绍如何实现一个处理程序,将图像发送回UI:
private void forwardImage(HttpExchange exchange, String imagefilename) throws IOException {
byte[] result = readSmallBinaryFile(imagefilename);
if (result == null) {
// resource_not_found_error
}
exchange.getResponseHeaders().set("Content-Type", CONTENT_TYPE_IMG);
OutputStream os = null;
try {
exchange.sendResponseHeaders(200, message.length);
os = exchange.getResponseBody();
os.write(message);
} finally {
os.close();
}
return os;
}
如果您输入getPage
函数代码,将所有要发送到客户端的数据保存到文件中,您会得到什么?顺便问一下,使用String
可以存储二进制图像数据吗?对代码块使用一致的逻辑缩进。代码的缩进旨在帮助人们理解程序流程!
private void forwardImage(HttpExchange exchange, String imagefilename) throws IOException {
byte[] result = readSmallBinaryFile(imagefilename);
if (result == null) {
// resource_not_found_error
}
exchange.getResponseHeaders().set("Content-Type", CONTENT_TYPE_IMG);
OutputStream os = null;
try {
exchange.sendResponseHeaders(200, message.length);
os = exchange.getResponseBody();
os.write(message);
} finally {
os.close();
}
return os;
}