Java 将图像转换为输入流,而无需创建文件

2022-09-02 12:30:08

对于我正在处理的小程序,我需要将文件转换为输入流,以便我可以将图像上传到我的MySQL服务器。最初我使用的是这个代码:BufferedImage

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");
}

(同时捕捉相关异常)代码挂起在小程序尝试将图像保存到计算机的部分。代码在Eclipse中或每当我从localhost运行小程序时都能完美地工作,所以我假设问题在于小程序在将文件保存到用户计算机时所拥有的特权。

我只是想知道是否有一种方法可以将图像文件转换为输入流,而无需将文件保存到用户的计算机。我尝试使用:

ImageIO.createImageInputStream(image);

但后来我无法将背面转换为.有什么建议吗?ImageInputStreamInputStream

谢谢!


答案 1

通常,您将使用ByteArrayOutputStream来实现此目的。它充当内存中流。

ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(image,"png", os); 
InputStream fis = new ByteArrayInputStream(os.toByteArray());

答案 2

您是否尝试过写入 a,然后从该数据创建一个以进行读取?(调用 ,然后调用将包装该字节数组的构造函数。ByteArrayOutputStreamByteArrayInputStreamtoArrayByteArrayOutputStreamByteArrayInputStream


推荐