在数据库中存储任何类型的文件

时间:2012-02-02 05:22:15

标签: java database

我打算在J2EE中开发一个门户网站,供学生上传和下载数据。数据可以是PDF文件,doc文件,ppt文件,也可以是图像或视频。

如何管理数据库中的数据?

3 个答案:

答案 0 :(得分:2)

看起来你需要全力以赴。我只是给出指示,你需要工作,如果特定的问题出现问题。

  1. 将文件上传到您的文件系统,存储或Amazon S3等。对于此用途,类似Apache FileUpload

  2. 上传完成后,获取存储服务器上保存文件的位置。说,/mnt/media/uploads/file.extension

  3. 让您的数据库包含一个存储有关该文件的元数据的表。一般来说,它看起来像:

    upload_id | file_name | file_location | user_id | timestamp
    

    其中upload_id是PK,file_name是上传文件的原始名称,file_location是文件的实际完整路径,它位于您的文件中存储,user_id是上传者的ID,来自users表的FK。

  4. 显示部分:您有逻辑使用此数据库显示file_name

  5. 要下载,您可以使用此类How to config Tomcat to serve images from an external folder outside webapps?,请注意,这不仅限于提供图像文件。它可以提供任何类型的文件。

  6. 现在,您会想,为什么我在做这么多痛苦的事情而不是仅仅将其保存为数据库中的二进制数据?好吧,我不想深入讨论,我个人更喜欢这种方法,因为我认为数据库用于数据,文件系统用于文件。在这里查看一个很好的讨论:Storing Images in DB - Yea or Nay?

    希望这有帮助。

答案 1 :(得分:0)

我猜你不关心数据的格式(也就是说,你不会在数据库级查询数据),在这种情况下你应该查看二进制数据类型。

如果不知道您正在使用哪个数据库后端,我无法更具体,但此数据类型的一些常用名称为BLOBbinaryvarbinary,{ {1}}或raw

更多信息:http://onlamp.com/onlamp/2001/09/13/aboutSQL.html

答案 2 :(得分:0)

将文件存储在重命名为存储文件名的记录ID的文件系统中。这样可以减少开销,并且可以更好地扫描病毒; “你上传了xyz病毒”。

您甚至可以在其他服务器上存储大文件等技巧。备份更容易。