【发布时间】:2014-01-12 04:43:31
【问题描述】:
我无法将我的 blob 转换为缓冲图像,以便我可以使用它。我从使用 inputstream 上传的数据库中返回了一个 blob(jpg 图像)。在我的数据库中,它存储为我注意到的 BufferedInputStream。我得到 blob 就好了,它是一堆奇怪的符号,并说它是 jpg 所以图像必须很好。谁能发现我做错了什么?也许我把它转换错了?在 image = ImageIO.read(new ByteArrayInputStream(data));图片返回 null。
@GET
@Path("{id}")
@Produces("image/*")
public Response post(@PathParam("id") String id) throws IOException {
Connection con = connection();
Blob blob = getPhoto(con);
BufferedImage image = null;
byte[] data = null;
int blobLength = 0;
try {
blobLength = (int) blob.length();
data = blob.getBytes(1, blobLength);
image = ImageIO.read(new ByteArrayInputStream(data));
// ImageIO.write(image, "JPEG", new File("C:/Users/Nicolas/Desktop/image.jpg"));
} catch (SQLException e2) {
e2.printStackTrace();
}
return Response.ok(image).build();
}
我如何写入数据库
public void postPhoto(Connection con, InputStream uploadedInputStream){
String mySQL = "INSERT INTO photos (photo) values (?)";
PreparedStatement pStmt = con.prepareStatement(mySQL);
pStmt.setBlob(1, uploadedInputStream);
pStmt.execute();
}
我如何将文件发送到我的 servlet
var fileInput = document.getElementById('file');
var file = fileInput.files[0];
var formData = new FormData();
formData.append("file", file);
var parameters="first="+firstName+"&last="+lastName+"&file="+file;
xmlhttp.open("post","http://localhost:8080/restService/api/submitinfo",true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.send(formData);
【问题讨论】:
-
blob.getBytes()之后的数据是否填充了字节? -
是的,它充满了字节,并且与原始 jpg 的字节数几乎相同
-
我会先检查文件。将
data写入文件并尝试使用一些图像查看器打开它。如果您有有效的 jpg 文件,请尝试通过ImageIO.read(new File(...);读取它。我认为问题在于数据不是有效的图像。 -
您可以尝试使用
ImageIO.createImageInputStream(new ByteArrayInputStream(data)),然后将其结果传递给ImageIO.read,但老实说,我怀疑它会起作用。能把你用来写的代码贴出来吗... -
好吧,如果 windows photo view 显示该图像似乎已损坏,则可能是页眉损坏或其他一些问题。您是否尝试过使用有效图片?
标签: java mysql web-services jersey inputstream