如何上传图像并将其保存在数据库中?
这个问题在这里已经有了答案:
对于文件上传部分,您需要在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