如何在 Java 中将图片发送到浏览器
How to send picture to browser in Java
我可能一起走错了路。我正在尝试使用我在 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 Header.
图片数据不能直接放在HTML数据中。
你可以用base64对图片进行编码,然后用HTML这样的代码:
<img src="data:(file type);base64,(base64 text)">
file type
对于 .gif 应该是 image/gif
,对于 .jpg 应该是 image/jpeg
示例:
<img src="data:image/gif;base64,R0lGODlhCgAJAPcAAAAAAAAAMwAAZgAAmQAAzAAA/wArAAArMwArZgArmQArzAAr/wBVAABVMwBVZgBVmQBVzABV/wCAAACAMwCAZgCAmQCAzACA/wCqAACqMwCqZgCqmQCqzACq/wDVAADVMwDVZgDVmQDVzADV/wD/AAD/MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMrADMrMzMrZjMrmTMrzDMr/zNVADNVMzNVZjNVmTNVzDNV/zOAADOAMzOAZjOAmTOAzDOA/zOqADOqMzOqZjOqmTOqzDOq/zPVADPVMzPVZjPVmTPVzDPV/zP/ADP/MzP/ZjP/mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YrAGYrM2YrZmYrmWYrzGYr/2ZVAGZVM2ZVZmZVmWZVzGZV/2aAAGaAM2aAZmaAmWaAzGaA/2aqAGaqM2aqZmaqmWaqzGaq/2bVAGbVM2bVZmbVmWbVzGbV/2b/AGb/M2b/Zmb/mWb/zGb//5kAAJkAM5kAZpkAmZkAzJkA/5krAJkrM5krZpkrmZkrzJkr/5lVAJlVM5lVZplVmZlVzJlV/5mAAJmAM5mAZpmAmZmAzJmA/5mqAJmqM5mqZpmqmZmqzJmq/5nVAJnVM5nVZpnVmZnVzJnV/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwAM8wAZswAmcwAzMwA/8wrAMwrM8wrZswrmcwrzMwr/8xVAMxVM8xVZsxVmcxVzMxV/8yAAMyAM8yAZsyAmcyAzMyA/8yqAMyqM8yqZsyqmcyqzMyq/8zVAMzVM8zVZszVmczVzMzV/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8Amf8AzP8A//8rAP8rM/8rZv8rmf8rzP8r//9VAP9VM/9VZv9Vmf9VzP9V//+AAP+AM/+AZv+Amf+AzP+A//+qAP+qM/+qZv+qmf+qzP+q///VAP/VM//VZv/Vmf/VzP/V////AP//M///Zv//mf//zP///wAAAAAAAAAAAAAAACH5BAEAAPwALAAAAAAKAAkAAAgkAPcJHLgPAEGCAAweLJhwYUOFCAdCLBhRYMKLDSkeNJgRIYCAADs=">
您不能直接将字节内容显示到浏览器中。使用以下步骤
第 1 步:将字节数组转换为数据 url
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+" />");
我可能一起走错了路。我正在尝试使用我在 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 Header.
图片数据不能直接放在HTML数据中。
你可以用base64对图片进行编码,然后用HTML这样的代码:
<img src="data:(file type);base64,(base64 text)">
file type
对于 .gif 应该是 image/gif
,对于 .jpg 应该是 image/jpeg
示例:
<img src="data:image/gif;base64,R0lGODlhCgAJAPcAAAAAAAAAMwAAZgAAmQAAzAAA/wArAAArMwArZgArmQArzAAr/wBVAABVMwBVZgBVmQBVzABV/wCAAACAMwCAZgCAmQCAzACA/wCqAACqMwCqZgCqmQCqzACq/wDVAADVMwDVZgDVmQDVzADV/wD/AAD/MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMrADMrMzMrZjMrmTMrzDMr/zNVADNVMzNVZjNVmTNVzDNV/zOAADOAMzOAZjOAmTOAzDOA/zOqADOqMzOqZjOqmTOqzDOq/zPVADPVMzPVZjPVmTPVzDPV/zP/ADP/MzP/ZjP/mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YrAGYrM2YrZmYrmWYrzGYr/2ZVAGZVM2ZVZmZVmWZVzGZV/2aAAGaAM2aAZmaAmWaAzGaA/2aqAGaqM2aqZmaqmWaqzGaq/2bVAGbVM2bVZmbVmWbVzGbV/2b/AGb/M2b/Zmb/mWb/zGb//5kAAJkAM5kAZpkAmZkAzJkA/5krAJkrM5krZpkrmZkrzJkr/5lVAJlVM5lVZplVmZlVzJlV/5mAAJmAM5mAZpmAmZmAzJmA/5mqAJmqM5mqZpmqmZmqzJmq/5nVAJnVM5nVZpnVmZnVzJnV/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwAM8wAZswAmcwAzMwA/8wrAMwrM8wrZswrmcwrzMwr/8xVAMxVM8xVZsxVmcxVzMxV/8yAAMyAM8yAZsyAmcyAzMyA/8yqAMyqM8yqZsyqmcyqzMyq/8zVAMzVM8zVZszVmczVzMzV/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8Amf8AzP8A//8rAP8rM/8rZv8rmf8rzP8r//9VAP9VM/9VZv9Vmf9VzP9V//+AAP+AM/+AZv+Amf+AzP+A//+qAP+qM/+qZv+qmf+qzP+q///VAP/VM//VZv/Vmf/VzP/V////AP//M///Zv//mf//zP///wAAAAAAAAAAAAAAACH5BAEAAPwALAAAAAAKAAkAAAgkAPcJHLgPAEGCAAweLJhwYUOFCAdCLBhRYMKLDSkeNJgRIYCAADs=">
您不能直接将字节内容显示到浏览器中。使用以下步骤
第 1 步:将字节数组转换为数据 url
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+" />");