java - 如何在数据库中只存储图像路径(URL)而不是图像本身?

标签 java image jsp servlets

我在 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/

相关文章:

JavaMail API 不适用于我,但有异常 com.sun.mail.util.MailConnectException : Couldn't connect to host, 端口

Java ListSet 某处?

java - 了解超快速模糊算法

html - 这种技术在css中叫什么?

java - ModelAndView中如何使用Redirect

java - JSP 表单输入最大长度不适用于数字类型

java - 如何在输入验证期间显示临时气球工具提示?

java - OpenCSV 仅读取文件的一部分

javascript - 当我将鼠标悬停在图像上时,我希望激活叠加悬停效果

java - 如何在 struts 标签中获取 JSP scriptlet 值