Đối với một applet tôi đang làm việc, tôi cần chuyển đổi tệp BufferedImage
thành luồng đầu vào để tôi có thể tải hình ảnh lên máy chủ MySQL của mình. Ban đầu tôi đã sử dụng mã này:Java chuyển đổi hình ảnh thành luồng đầu vào KHÔNG tạo tệp
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection connection =
DriverManager.getConnection(connectionURL, "user", "pass");
psmnt = connection.prepareStatement(
"insert into save_image(user, image) values(?,?)");
psmnt.setString(1, username);
ImageIO.write(image, "png", new File("C://image.png"));
File imageFile = new File("C://image.png");
FileInputStream fis = new FileInputStream(imageFile);
psmnt.setBinaryStream(2, (InputStream)fis, (fis.length()));
int s = psmnt.executeUpdate();
if(s > 0) {
System.out.println("done");
}
(trong khi bắt các trường hợp ngoại lệ có liên quan) Mã treo trên phần nơi ứng dụng tìm cách lưu hình ảnh vào máy tính. Mã này hoạt động hoàn hảo trong Eclipse hoặc bất cứ khi nào tôi chạy applet từ localhost, vì vậy tôi giả định rằng vấn đề nằm trong các đặc quyền mà applet có trong việc lưu các tệp vào máy tính của người dùng.
Tôi đã tự hỏi liệu có cách nào để biến tệp hình ảnh thành một luồng đầu vào mà không phải lưu tệp vào máy tính của người dùng hay không. Tôi đã thử sử dụng:
ImageIO.createImageInputStream(image);
Nhưng sau đó tôi không thể chuyển đổi số ImageInputStream
trở lại thành InputStream
. Bất kỳ đề xuất?
Cảm ơn!
argh! cùng một mã mà đọc từ một cơ sở dữ liệu xử lý hình ảnh !! Đó là khủng khiếp. Vui lòng đọc: [Gắn kết] (http://en.wikipedia.org/wiki/Cohesion_ (computer_science)), [Khớp nối] (http://en.wikipedia.org/wiki/Coupling_ (computer_science)) –
Có thể là không phải là thực hành tốt nhất. Cảm ơn bạn đã thông tin, tôi sẽ phải khắc phục điều đó sau. – David
Có thể trùng lặp [Làm cách nào để chuyển đổi BufferedImage thành InputStream?] (Http://stackoverflow.com/questions/4251383/how-to-convert-bufferedimage-to-inputstream) –