我在 google 上搜索了一些高效的图像存储解决方案,并得到了非常令人兴奋的一行,读到你应该只在数据库中存储图像路径而不是整个图像。
现在我正在做一个基于 MVC 的 Java web 项目,并且也愿意了解更多关于这个主题的信息。具体来说,我想知道我是否能够将我的图像直接从我的 Servlet
保存到任何图像托管网站,它会立即为我提供一个链接,我将存储在我的数据库列中以供将来使用?
最佳答案
you should store only image path rather that whole image in the database.
确实值得推荐。在数据库中存储二进制数据在语义上没有任何意义。你不能索引它,也不能在其中搜索,等等。这只是“死”数据。您可以将其直接存储在磁盘文件系统上,然后将其唯一标识符(通常只是文件名)存储在数据库中。文件名可以是可索引的 varchar(因此可以更快 SELECT ... WHERE
)。
I want to know if I am able to save my image directly to any image hosting website from my Servlet which instantly provide me a link that I will store in my database column for future use?
我不确定您的具体问题是什么。您应该意识到传输字节毕竟只是读取任意 InputStream
的问题。并将其写入仲裁 OutputStream
.你的具体问题应该是,“我如何获得上传图像的 InputStream
?”,或“我如何获得一个 OutputStream
到本地磁盘文件系统?”,或者“我如何获得一个OutputStream
到图像托管网站?”。
获取上传图片的InputStream
简单。所有体面的文件上传 API 都提供了一种 getInputStream()
方法。另见 How to upload files to server using JSP/Servlet?获取 OutputStream
到 File
在本地磁盘文件系统上也很容易。只需构造一个 FileOutputStream
围绕着它。
File file = File.createTempFile(prefix, suffix, "/path/to/uploads");
InputStream input = uploadedFile.getInputStream();
OutputStream output = new FileOutputStream(file);
// Now write input to output.
String uniqueFileName = file.getName();
// Now store filename in DB.
获取 OutputStream
对其他一些主机来说是一个故事。你想如何连接到它?使用 FTP?使用 FTPClient#appendFileStream()
.或者使用 HTTP (eek)?使用 URLConnection#getOutputStream()
或 HttpClient .如果你卡住了,你应该问一个更细粒度的问题。
最后,为了通过 URL(通过 <img src>
或直接请求或其他方式)获取此图像,请阅读此答案:Reliable data serving .
关于java - 如何在数据库中只存储图像路径(URL)而不是图像本身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8445648/