我将很快启动一个项目,需要支持大型二进制文件.我想将Ruby on Rails用于webapp,但我关心的是BLOB支持.根据我使用其他语言,框架和数据库的经验,BLOB经常被忽略,因此具有差,难和/或错误的功能.
RoR是否充分支持BLOB?一旦你已经承诺使用Rails,是否有任何问题蔓延?
BTW:我想使用PostgreSQL和/或MySQL作为后端数据库.显然,底层数据库中的BLOB支持很重要.目前,我想避免专注于DB的BLOB功能; 我对Rails本身的反应更感兴趣.理想情况下,Rails应该隐藏数据库的详细信息,因此我应该可以从一个切换到另一个.如果不是这种情况(即:使用Rails与特定数据库存在一些问题),那么请提及它.
更新:另外,我不仅仅是在谈论ActiveRecord.我需要在HTTP端处理二进制文件(有效地上传文件).这意味着通过Rails访问适当的HTTP标头和流.我已更新问题标题和说明以反映这一点.
我在MYSQL中存储图像.
我有桌子
CREATE TABLE myTable (id INT, myImage BLOB);
Run Code Online (Sandbox Code Playgroud)
当我试图插入4.7MB文件时,我得到例外
com.mysql.jdbc.PacketTooBigException: Packet for query is too large (4996552 > 1048576). You can change this value on the server by setting the max_allowed_packet' variable.
Run Code Online (Sandbox Code Playgroud)
我相信这只与图像尺寸有关.我可以使用其他任何变量类型吗?
根据较旧的SO问题,我也试过MEDIUMBLOB但仍然得到同样的错误.
在项目开始时,我执行以下查询,现在一切正常
SET GLOBAL max_allowed_packet = 1024*1024*14;
Run Code Online (Sandbox Code Playgroud) 我正在通过XHR检索ArrayBuffer,并希望使用FileWriter将其保存到FileSystem API.FileWriter期望Blob和Blob构造函数不会使用ArrayBuffer,它需要一个ArrayBufferView.
有很多ArrayBufferView可供选择,我怎么知道哪个是正确的?
blob对我来说的一个问题是,在java中,ByteBuffer(在cassandra中映射到blob)不是Serializable,因此不适用于EJB.
考虑到json相当大,在cassandra中存储json的更好类型.是文字还是blob?
在决定blob vs json时,json的大小是否重要?
如果它是像oracle这样的任何其他数据库,那么通常使用blob/clob.但在Cassandra,每个单元可以容纳2GB,这有关系吗?
请将此问题视为本案例中text和blob之间的选择,而不是排序到是否为json使用单列的建议.
我正在努力将文件保存到sql blob到varbinary(max)列,并且现在有了保存方面的工作(我相信).
我无法弄清楚如何读取数据,因为我正在使用存储过程检索我的数据库值我应该能够访问列数据,如ds.Tables [0] .Rows [0] [ "blobData"]; 所以我有必要像我在下面的例子中看到的那样有一个SQLCommand等:
private void OpenFile(string selectedValue)
{
String connStr = "...connStr";
fileName = ddlFiles.GetItemText(ddlFiles.SelectedItem);
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "SELECT BLOBData FROM BLOBTest WHERE testid = " + selectedValue;
using (SqlDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
{
int size = 1024 * 1024;
byte[] buffer = new byte[size];
int readBytes = 0;
int index = 0;
using (FileStream fs = new …Run Code Online (Sandbox Code Playgroud) 我需要在MySQL表中存储非常大量(数千万)的512位SHA-2哈希值.为了节省空间,我想以二进制形式存储它们,而不是以十六进制数字形式存储它们.我正在使用ORM(DBix :: Class),因此存储的具体细节将从代码中抽象出来,这可以将它们扩展到我选择的任何对象或结构.
MySQL的BIGINT类型是64位.所以我理论上可以将哈希分成八BIGINT列.这看起来很荒谬.我的另一个想法是使用单个BLOB列,但我听说由于MySQL将它们视为可变长度字段,因此访问速度很慢.
如果有人可以提供一些widom,这将节省我几个小时的基准测试各种方法,我会很感激.
注意:对任何说"只使用postgres!"的人自动-1.:)
这是我上一个问题的后续跟踪:Blob和存储要求
我做了一些测试SHOW TABLE STATUS,发现实际使用的磁盘空间总量仅取决于上传到数据库的实际文件的大小,而不取决于列的类型(例如TINYBLOB或LONGBLOG).
那么,如果情况并非如此,那么当我们选择BLOB类型的另一个时,会有什么区别呢?
所以我的最后一个问题是如何从搜索中显示我的techID:
我想让我的"详细信息"页面引用我的服务器中通过techID链接的两个单独部分
我的新问题仍在此页面上.我也添加了一个回声图像.但我无法使用Blob并显示我的图像而不是二进制JPEG数据.我一直试图找到另一个这样的实例,但找不到任何修复我的错误.
//Header ('Content-type: image/jpeg')
echo "<dt><strong>Technician Image:</strong></dt><dd>" . '<img src='.$row2['image'].' width="290" height="290">' . "</dd>";
Run Code Online (Sandbox Code Playgroud)
和
$query_Recordset2 = "SELECT * FROM technician WHERE techID=" . $row1["techID"] ;
$Rs2 = mysql_query($query_Recordset2) or die(mysql_error());
Run Code Online (Sandbox Code Playgroud)
到目前为止,我对上一个问题所做的唯一更改(显然包括我给出的修复工作).
我不明白的是在哪里以及如何'Content-type: image/jpeg'让我的页面识别链接的图像是MIME类型image/jpeg.
我在我的页面上看到的是这个
技术员图片: E j i`= 7f $D o" b Ckkc R ^M ;n~ 0&m)J RE)JDRE)JDRE)JDRE)JDRE)JDRE)JDSjR)+ N.R,U i n9, QX~ {( ̮ : 2 12 " aV7 6 { LP[ W گ R $ + LMc'hM 5 o PA …
我尝试通过网址(带ref().put(file))(www.example.com/img.jpg)将图片上传到Firebase存储空间.
要做到这一点,我需要一个文件或Blob,但每当我尝试new File(url)它时说"没有足够的论点"......
编辑:我实际上想上传整个文件目录,这就是为什么我无法通过控制台上传它们
我有一个azure函数,由一个文件放入blob存储器触发,我想知道如何(如果可能的话)获取触发该函数的blob(文件)的名称,我试过:
fileObject=os.environ['inputBlob']
message = "Python script processed input blob'{0}'".format(fileObject.fileName)
Run Code Online (Sandbox Code Playgroud)
和
fileObject=os.environ['inputBlob']
message = "Python script processed input blob'{0}'".format(fileObject.name)
Run Code Online (Sandbox Code Playgroud)
但这些都没有奏效,它们都导致错误.我可以从这个或一些建议中得到一些帮助吗?
谢谢