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

时间:2011-12-09 12:43:35

标签: java image jsp servlets

我已经使用Google搜索了一些高效的图像存储解决方案,并且阅读了非常令人兴奋的内容,您应该只存储图像路径,而不是将整个图像存储在数据库中。

现在我正在开发一个基于MVC的Java Web项目,并且对这个主题非常了解。具体来说,我想知道我是否能够将我的图像直接保存到我Servlet的任何图像托管网站,它会立即为我提供一个链接,我将在我的数据库列中存储以供将来使用?

3 个答案:

答案 0 :(得分:3)

  

您应该只存储图像路径,而不是整个图像存储在数据库中。

这确实是推荐的。在数据库中存储二进制数据在语义上没有任何意义。你不能索引它,也不能搜索它,等等。这只是“死”的数据。您可以将其直接存储在磁盘文件系统上,然后将其唯一标识符(通常只是文件名)存储在数据库中。文件名可以是可索引的varchar(因此允许更快的SELECT ... WHERE)。


  

我想知道我是否能够将我的图像直接保存到我的Servlet中的任何图像托管网站,它立即为我提供了一个链接,我将在我的数据库列中存储以供将来使用? < / p>

我不确定你的具体问题是什么。您应该意识到,传输字节毕竟只是读取任意InputStream并将其写入仲裁OutputStream。您的具体问题应该是“我如何获得上传图像的InputStream?”或“我如何获得OutputStream到本地磁盘文件系统?”,或者“如何向图片托管网站获取OutputStream吗?“

获取上传的图片InputStream非常简单。所有体面的文件上传API都提供了getInputStream()方法。另请参阅How to upload files to server using JSP/Servlet?在本地磁盘文件系统上获取OutputStreamFile也很容易。只需围绕它构建一个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。如果你坚持下去,你应该问一个更细粒度的问题。

最后,为了通过网址(通过<img src>或直接请求或其他方式)获取此图片,请阅读以下答案:Reliable data serving

答案 1 :(得分:1)

这是一个tutorial how to upload a file to a server using servlets/JSP。然后使用Apache Commons IO将其保存到服务器上的某个目录中。将文件的路径保存在数据库中,并在下次要求使用时使用它。

答案 2 :(得分:-1)

当然,您可以使用 apache commons api 将您的图片上传到服务器中的指定文件夹,然后您可以根据需要更改其名称,您可以保存的图像格式是什么数据库中的路径并使用servlet上传图像。 apache commons api 是免费的,您将获得正确的文档apache站点。

相关问题