我正在尝试将图像从客户端传输到将其存入数据库的服务器。为此,我将我的图像转换为字节数组(它可以工作),并将其作为blob存入数据库(它可以工作)。
public static byte[] imageToBytes(String path) {
byte[] imageByte = null;
File img = new File(path);
try {
BufferedImage image = ImageIO.read(img);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", baos);
baos.flush();
imageByte = baos.toByteArray();
baos.close();
} catch (IOException ex) {
ex.printStackTrace();
}
return imageByte;
}
当我尝试从客户端读取数据库时,我的问题就到了。
public static Image bytesToImage(byte[] bytes) {
BufferedImage image = null;
try {
image = ImageIO.read(new ByteArrayInputStream(bytes));
} catch (IOException ex) {
ex.printStackTrace();
}
return image;
}
此时图像为空...我搜索了它,我的代码似乎是正确的。
我不仅从服务器获取图像,而且还获得了GSon的整个帐户,当我播放我的json字符串时,我得到了:
{"username":"Filou","picture":[91,45,49,44,32,45,52,48,44,32,45,49,44,32,45,51,55,44,32,48,44,32,54,55,44,32,48,44,32,56,44,32,54,44,32,54...
为了从服务器获取json String,我使用BufferedReader然后用它创建一个User(bean):
String strRetour = reader.readLine();
User userReturn = gson.fromJson(strRetour, User.class);
在bean用户中有一个图片的getter / setter,当我sout它时,它看起来很好:
System.out.println(Arrays.toString(userReturn.getPicture()));
[91, 45, 49, 44, 32, 45, 52, 48, 44, 32, 45, 49, 44, 32, 45, 51, 55, 44, 32, 48, 44, 32, 54, 55, 44, 32, 48, 44, 32, 56, ...
所以我猜字节数组很好吗?
我的问题是:问题出在哪里?为什么我的图片为空?
非常感谢!
答案 0 :(得分:0)
在bean用户中有一个图片的getter / setter,当我sout它时,它看起来很好:
image null
所以我猜字节数组很好吗?
我的问题是:
FF D8
?为什么我的91 45 49 44 32 45 52 48 44 32 45 49 44 32 45 51 ‘EID2ERHD2EID2EQ 55 44 32 48 44 32 54 55 44 32 48 44 32 56 UD2HD2TUD2HD2V
?
您显示的字节不是JPEG格式。真实JPEG数据以字节.jpg
开头。
.png
我不知道你的数据库/服务器将jpeg字节转换成什么格式,但上面不是已知的图像格式(例如:不是imageByte[0]
,或imageByte[1]
格式等)。
检查[0]=
和[1]=
的值(应{{1}} -1 和{{1}} -40 ) ,您的JSON图像数据应该匹配成功解码为jpeg。