我有一个使用Paperclip插件进行图片上传的应用程序.现在该应用程序应该部署到具有只读文件系统的主机(heroku).我可以以某种方式告诉paperclip将图像存储在数据库中吗?
我知道可以将数据库中的图像存储为二进制大对象.但我曾经在一些论坛Web应用程序中看到它们作为平面文件存储在Web服务器机器中并在需要时检索.
两种方法的优点和缺点是什么?
何时采取哪种方法?
我正在编写一个php应用程序,并想知道在数据库中存储完整文件是不是一个坏主意.文件应该在100-200kb左右,主要是文本文件(txt,doc,docx等)或小图像文件.或者这只是一个错误的想法?
我有一个想要实施文档管理系统的公司实习面试,他们正在考虑首先开源解决方案,他们的首选是Alfresco,但决定仍然不是最终的,我的工作部分将是调查是Alfresco是最好的解决方案.
我从项目描述中看到的是,他们将使用MySQL数据库实现Alfresco,而不是仅将DBMS用于文档元数据和索引,但他们实际上想要将文档存储在其中.根据公司资料,文档类型主要是PDF和.doc,而不是图像.
我已经研究了一下,我已经阅读了有关将文件存储到数据库中的所有主题,而不是复制问题.因此,根据我的理解,存储BLOBS通常是不可推荐的,并且根据公司的概况及其存档的法律义务,我认为他们将需要存储更多的文档.
我想尽可能多地为面试做好准备,这就是为什么我希望你对这些问题的意见:
决定将文档存储到DBMS中的原因是什么(特别是考虑到您正在安装Alfresco,它将文件存储在FS中)?
您是否有任何将文档存储到MySQL数据库的经验?
非常感谢所有的帮助,我对面试感到非常兴奋,真的很想实习,所以这是我以前真正想要了解的事情之一!
谢谢!!!!
可能重复:
在DB中存储图像 - 是或否?
将图像存储在文件系统中更快更可靠还是应该将它们存储在数据库中?
假设图像不超过200 MB.目标是快速,可靠的访问.
一般来说,人们如何决定在文件系统或数据库中存储文件(例如图像,PDF)?
在数据库中存储大文件(大约 100 GB)是个好主意吗?
目前我们考虑使用NBT格式或使用mysql/postgresql数据库将数据保存在文件夹中。
我正在使用 Android 的 Room 库来创建数据库。它有一个简单的表格,其中包含 ID、日期、标题、文本、地址和图像。
当我尝试将字节数组插入表中时出现问题(我通过 for 循环使用测试条目进行测试)。我正在将图像转换为byte[]. 当我放置简单的字符串而不是图像时,它可以正常工作。
这是错误:
Failed to read row 0, column 0 from a CursorWindow which has 0 rows, 6 columns.
FATAL EXCEPTION: AsyncTask #1
Process: com.database.test.app, PID: 18552
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:309)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.IllegalStateException: Couldn't read row 0, col 0 from CursorWindow. Make sure the Cursor is initialized correctly before accessing …Run Code Online (Sandbox Code Playgroud) 相关: 在DB中存储图像 - 是还是不?
在阅读上述问题后,似乎使用数据库进行图像存储的首选方法是仅在数据库中存储文件路径.但是,大多数答案似乎都集中在Web服务器上.
就我而言,我正在开发一个桌面应用程序,它将在Intranet中的多台计算机上使用.专用服务器将托管数据库,其中包含与在各种设备上执行测试相关的信息.
图像需要以某种方式存储在服务器上.在这种情况下,将图像存储在数据库中是否是正确的方法,甚至是唯一的方法?
优点:
缺点
编辑:如标签中所述,应用程序是用C#/ .NET编写的.如果在这种情况下将图像写入文件系统是一个选项,我可以使用一些帮助来理解这是如何完成的.
编辑2:正如下面的评论中详细阐述的那样,现在我假设一个MySQL数据库,尽管SQL Server 2008的FileStream功能可能会改变它.
同样在我的情况下,图像将经常添加,并且在此之后可以被认为是只读的,因为它们永远不应该被更改,并且将在需要时被读出.图像可能很小(每个约70k),我也在考虑服务器上的其他二进制格式存储,每个文件大约20k,我可能会使用相同的存储和检索方法.
我阅读本教程关于在DB中存储图像.在本教程中,作者在插入之前转义二进制数据中的特殊字符:http://www.phpriot.com/articles/images-in-mysql/7 (addslashes尽管使用虽然mysql_real_escape_string更好 - 但这是另一个问题).
关键是,在显示时,他只显示存储的数据:http://www.phpriot.com/articles/images-in-mysql/8
我的问题:
1)我们是否需要转义特殊字符,即使对于二进制字段类型(blob)?
2)如果是这样,那么,为了正确显示图像,我们不需要再次"取消"字符吗?(如果是这样,最好的方法是什么.关于效率的任何评论?对于大图像:转义和转移可能是一个很大的开销?).
或者我对转义的理解是完全错误的(转义只会影响查询,而不会影响插入/存储的最终数据?).
谢谢
J.P
我试图挽救.doc,.pdf,.txt,使用Hibernate,JSF和MySQL和图像文件到我的数据库.
我创建了一个列来保存BLOB类型的文件.如果我保存.txt类型,则文件正确保存.
如果我想保存任何其他格式的文件,那么我得到一个例外.在我的bean中,我创建了一个字段名称:byte[] file;
如何正确保存它没有任何例外?我是否需要更改mysql列的数据类型或为java类使用不同的字段?
(回应BalusC)
这是我用于文件编写的代码.我正在使用fileInputStream然后使用hibernate框架保存文件.
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
String name = item.getFieldName();
String value = item.getString();
} else {
String fieldName = item.getFieldName();
String fileName = item.getName();
String contentType = item.getContentType();
boolean isInMemory = item.isInMemory();
long sizeInBytes = item.getSize();
byte[] fileInBytes=item.get();
try {
File uploadedFile = new File("/home/db/webApp", fileName);
uploadedFile.createNewFile();
FileInputStream fileInputStream = new FileInputStream(uploadedFile); …Run Code Online (Sandbox Code Playgroud) database ×6
image ×3
mysql ×3
blobstorage ×2
file ×2
php ×2
.net ×1
alfresco ×1
android ×1
android-room ×1
arrays ×1
binary-data ×1
c# ×1
filesystems ×1
hibernate ×1
java ×1
jsf ×1
paperclip ×1
ruby ×1
security ×1
sql ×1
sqlite ×1
storing-data ×1