【问题标题】:play framework 2 upload file to mySQLplay framework 2 上传文件到mySQL
【发布时间】:2012-07-25 11:49:14
【问题描述】:

我正在尝试使用 play framework2 将图像上传到 mySQL。

在 play framework 1.24 中,我使用“play.db.jpa.Blob”和"multipart/form-data" 将图像上传到 mySQL。

但是在play framework2中没有Blob...如何使用"multipart/form-data"将图像上传到mySQL?

【问题讨论】:

标签: mysql playframework playframework-2.0 blob


【解决方案1】:

您绝对应该不将文件存储到数据库中。这是个坏主意。相反,您应该将文件上传到某个本地或远程文件系统,并且只将文件名/文件路径保存在数据库中。

编辑:由于我的回答被否决了,我将尝试给出更多解释:

  1. 首先,在 Play 框架中使用 Blob 类型时,它将在您的数据库中创建一个 BLOB 字段。但是,并非所有数据库在 blob 类型后面都有相同的实现。在某些 RDMS 中,Blob 类型的存储空间有限,而在其他(例如 MySQL)中,blob 字段的最大大小将由配置决定。

  2. 其次,当您从数据库中检索文件并将它们发送给用户时,您的内存使用量将会爆炸。很简单,因为 Play 在将 blob 字段发送给用户之前会将其加载到内存中。

  3. 另外,如果您的数据库中存储了大量文件,它将很快超载。 (要求)。您的下一步将是在新机器上移动数据库。但是如果你存储了很多数据,你的下一个瓶颈可能不是数据库,而是你的应用程序和数据库服务器之间的带宽。

  4. 由于数据库产生的开销,使用数据库进行文件存储总是比直接读取文件系统更慢且消耗更多内存。

将您的数据库用作文件存储引擎是一种简单快捷的设置解决方案,但它充满了不便,可能会在您的项目后期真正改变事情。

【讨论】:

  • 很高兴看到为什么将文件存储在数据库中是一种糟糕的做法。
  • 非常感谢,我现在只在数据库中存储文件名
  • 请接受答案。
  • 在很多情况下可能需要将文件存储在数据库中。例如,Heroku 等许多平台不允许您直接更改文件系统,您需要使用数据库进行文件上传。
【解决方案2】:

另一种方式,您可以在数据库中存储对照片的引用。

在视图中:

<form action="@routes.Application.index" method="POST" enctype="multipart/form-data">
           Photo<input type="file" name="photo"> <br>
             <input type="submit" value="Submit">    
</form>

在控制器中:

MultipartFormData body = request().body().asMultipartFormData();
            FilePart photo = body.getFile("photo");
            if (photo != null) {
                String fileName = photo.getFilename();
                File file = photo.getFile();
                File newFile = new File(play.Play.application().path().toString() + "//public//uploads//"+ "_" + fileName);
                file.renameTo(newFile); //here you are moving photo to new directory          
                System.out.println(newFile.getPath()); //this path you can store in database
            }
}

【讨论】:

    【解决方案3】:

    这是 Blob 对象透明处理的。它将文件存储在文件系统中,并将引用存储在数据库中。

    【讨论】:

    • 不,它没有。它在数据库中创建一个 BLOB 对象,并将该对象直接存储到数据库中。
    • 查看文件play.db.jpa.Blob的源代码,尤其是getStore()方法。 play.db.jpa.Blob
    猜你喜欢
    • 2012-07-02
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 2023-03-30
    • 2017-07-17
    • 1970-01-01
    • 2015-05-13
    相关资源
    最近更新 更多