Konwertuj BufferedInputStream na obraz [duplikat]
To pytanie ma już tutaj odpowiedź:
ImageIO.read zwraca wartość null w tablicy bajtów 1 odpowiedźMam problem z przekształceniem obiektu blob w buforowany obraz, dzięki czemu mogę go użyć. Dostaję blob (obraz jpg) z mojej bazy danych, którą przesłałem za pomocą strumienia wejściowego. W mojej bazie danych jest przechowywany jako BufferedInputStream, który zauważam. Dostaję blob w porządku, jest to kilka dziwnych symboli i mówi, że to jpg, więc obraz musi być w porządku. Czy ktoś może zauważyć, co robię źle? Może źle to przekonam? W image = ImageIO.read (new ByteArrayInputStream (data)); Obraz zwraca wartość 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();
}
Jak piszę do bazy danych
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();
}
Jak wysłać plik do mojego serwletu
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);