如何用Java将图片发送到浏览器

时间:2015-09-13 01:52:21

标签: java arrays server client byte

我可能在一起走错路。我正在尝试使用我用Java编写的服务器代码将.gif或.jpg文件发送到我的FireFox浏览器。

使用此代码:

  File pic = new File(pictureFile);
  byte[] byteContent = Files.readAllBytes(pic.toPath());
  //System.out.println("Content: " + Arrays.toString(byteContent));

我确信我已成功将文件写入字节数组,因为如果取消注释System.out.println()行,我的IDE中的内容会读取[-1,-40,-1,-32, 0 ...](依此类推)。

当我尝试将图片输出到我的浏览器时:

  os.write("<html><head><title>Not Found</title></head><body>\n".getBytes());
  os.write("<h3>" .getBytes());
  os.write( byteContent);
  os.write(" </h3>\n".getBytes());
  os.write("</body></html>\n".getBytes()); 

输出是垃圾。我需要做什么?我确定我正在发送正确的HTTP标头。

2 个答案:

答案 0 :(得分:2)

图像数据无法直接放入HTML数据中。

您可以在base64中对图像进行编码,并以这种方式将其放入HTML代码中:

<img src="data:(file type);base64,(base64 text)">

file type对于.gif应为image/gif,对于.jpg <{1}}

示例:

image/jpeg

答案 1 :(得分:0)

您无法直接在浏览器中显示字节内容。使用以下步骤

步骤1:将字节数组转换为数据网址

StringBuilder sb = new StringBuilder();
sb.append("data:image/png;base64,");
sb.append(StringUtils.newStringUtf8(Base64.encodeBase64(byteContent, false)));
String newImage = sb.toString();

第2步:在img标签内使用

os.write("<img src="+newImage+" />");