我可能在一起走错路。我正在尝试使用我用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标头。
答案 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+" />");