gpt4 book ai didi

java - 使用Java将图像上传到MySql数据库

转载 作者:行者123 更新时间:2023-11-29 22:23:53 25 4
gpt4 key购买 nike

我已经阅读了有关 StackOverFlow 和其他教程的大量问题,认为将图像存储在文件中,然后将其唯一引用存储在数据库中总是更好。我正在尝试这样做,但最终我做了以下事情。我创建了一个 Maven 项目,并在 src/main/resources 文件夹下创建了一个文件夹 images,其中包含三个图像。下面是我的代码:

public class ImageHelper
{
private static final String IMAGE_FILE = "/images/1984.jpg";

Connection conn =null;
Statement statement = null;
PreparedStatement preparedStatement = null;
int byteArrayLength =0;
ConnectionClass newConnection = new ConnectionClass();
InputStream imageStream = null;
int imageFileLength;

//Link reference http://stackoverflow.com/questions/13967307/reading-from-src-main-resources-gives-nullpointerexception
//Link reference http://stackoverflow.com/questions/19916845/cant-access-to-files-in-resources-directory-with-maven-with-eclipse-ide

public void getPath(){

try
{
File imageFile = new File(this.getClass().getResource(IMAGE_FILE).toURI());
//System.out.println("ImageFile is: "+ imageFile.toString()); //Output is the full path starting from C drive till the image
imageFileLength = (int) imageFile.length();
//System.out.println("Image File length : "+ imageFileLength);
imageStream = new FileInputStream(imageFile);
System.out.println("ImageStream is :"+ imageStream.read()); // Output is 255
}
catch (IOException e)
{
e.printStackTrace();
}
catch (URISyntaxException e)
{
e.printStackTrace();
}

//Now insert this image path in table bookInfo in imagePath column

conn = newConnection.dbConnection();
String insertImage = "Insert into bookInfo(availability,isbn,hardback,paperback,imagePath) values (?,?,?,?,?)";
try
{
statement = conn.createStatement();
preparedStatement = conn.prepareStatement(insertImage);
preparedStatement.setString(1, "yes");
preparedStatement.setInt( 2, 97815972);
preparedStatement.setString(3, "hardback");
preparedStatement.setString(4, "not paperback");
preparedStatement.setBinaryStream(5, imageStream, imageFileLength);
preparedStatement.executeUpdate();

}
catch (SQLException e)
{
e.printStackTrace();
}

}
}

执行此代码时,我能够将 BLOB 放入数据库中。我不明白仅在数据库中存储图像路径的引用是什么意思。另外,该文件夹中有大约 10 张图像。我需要将它们全部插入数据库中。我想我正在做额外的一步。我首先从文件“images”获取图像,然后将其转换为 InputStream 并将其作为 BLOB 存储在 MySql 中。我很困惑我应该如何解决这个问题。将图像从文件上传到数据库的正确方法应该是什么。我不要求用户上传任何内容,而只是从数据库获取图像并在单击链接时将其显示给用户。任何帮助表示赞赏。预先感谢您。

最佳答案

我不明白你的问题是什么。

您已阅读关于使用将图像作为 BLOB 存储在数据库中的模式的建议。相反,将图像作为文件存储在文件系统上。为了在图像文件和数据库行之间建立“链接”,我们创建一个像

的列
 image_file_location  VARCHAR(255)

然后在该列中存储文件位置,即图像文件在文件系统上的位置的字符串表示形式。通常,这是相对位置,相对于配置文件中指定的目录。

 INSERT INTO mytable (..., image_file_location) VALUES (..., '/images/1984.jpg'); 

使用这种方法,无需将图像(图像文件的内容)存储在数据库的 BLOB 列中。

这种方法有一些缺点:数据库不管理图像文件。这些需要与数据库分开备份,并且该备份可能与数据库不完全一致。

此外,某些其他进程可能会重命名或删除图像文件,而不更新数据库。这将导致不一致,数据库中的一行引用了不存在的图像文件。

这种方法的好处是数据库更小,并且无需进行插入/更新 BLOB 数据的编程。

<小时/>

但是您问题中的代码似乎并不遵循该模式。该代码似乎正在加载图像(从文件中读取),并将其存储在 BLOB 列中。

如果您想恢复该图像,则需要反转用于加载 BLOB 的过程。运行查询,获取 BLOB 列的句柄,使用流读取器“读取”BLOB 的内容。

这样做的例子有很多。

再说一次,我不确定你在问什么问题。

关于java - 使用Java将图像上传到MySql数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30447539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com