如何上传图像并将其保存在数据库中?

这个问题在这里已经有了答案:

  • 如何使用JSP / Servlet将文件上传到服务器? 12个答案

  • 对于文件上传部分,您需要在HTML表单上设置enctype="multipart/form-data" ,以便网页浏览器发送文件内容,并且您希望在servlet的doPost()方法中使用request.getPart()将该文件作为InputStream 。 有关具体代码示例,另请参阅如何使用JSP / Servlet将文件上载到服务器?

    然后,为了将此InputStream保存在数据库中,只需在BLOB / varbinary / bytea列上使用PreparedStatement#setBinaryStream() ,或者在您最喜欢的数据库引擎中使用任何列表示“二进制数据”。

    preparedStatement = connection.prepareStatement("INSERT INTO user (name, email, logo) VALUES (?, ?, ?)");
    preparedStatement.setString(1, name);
    preparedStatement.setString(2, email);
    preparedStatement.setBinaryStream(3, logo);
    // ...
    

    您不一定需要将此InputStream转换为byte[] ,但它也不会具有内存有效性。 想象一下,100位用户同时上传10MB的图像,然后1GB的服务器内存将在此时分配。


    你可能不应该在数据库中存储图像。 数据库实际上是您可以存储二进制数据的最昂贵的地方 。 数据库大小将快速增长并且查询成本很高。 您可能最终得到的是不可扩展且几乎没有效率的图像托管解决方案。

    将其存储在单独的资源服务器中,如Amazon S3或其他任何地方(本地Nginx,Tomcat等)。

    相反,您可以存储文件的唯一文件名和/或完整路径。 通过这种方式,您可以方便数据库的工作负载,并且列数据可读,因此您可以快速找到想要的图片。 我一般都没有谈论性能,简单的基准测试很容易证明它。

    链接地址: http://www.djcxy.com/p/46213.html

    上一篇: How to upload an image and save it in database?

    下一篇: Recommended way to save uploaded files in a servlet application