如何上传文件到数据库的blob字段

如何上传文件到数据库的blob字段,第1张

BLOB (binary large object)----二进制大对象,是一个可以存储二进制文件的容器。

在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型。

BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件,由于它们的尺寸,必须使用特殊的方式来处理(例如:上传、下载或者存放到一个数据库)。

根据Eric Raymond的说法,处理BLOB的主要思想就是让文件处理器(如数据库管理器)不去理会文件是什么,而是关心如何去处理它。

但也有专家强调,这种处理大数据对象的方法是把双刃剑,它有可能引发一些问题,如存储的二进制文件过大,会使数据库的性能下降。在数据库中存放体积较大的多媒体对象就是应用程序处理BLOB的典型例子。

_RecordsetPtr pRecordset = m_conn.GetRecordSet(strSql)

// strPicContent 插入数据指针

if (pRecordset->RecordCount != 0)

{

pRecordset->MoveLast()

}

pRecordset->AddNew()

pRecordset->PutCollect(_T("Field1"), _variant_t(strPicPath))

pRecordset->PutCollect(_T("Field2"), _variant_t(strPicType))

pRecordset->PutCollect(_T("Field3"), _variant_t(nPicIndex))

pRecordset->PutCollect(_T("Field4"), _variant_t(strFirstUrl))

pRecordset->PutCollect(_T("Field5"), _variant_t(strParentUrl))

VARIANT varBLOB

SAFEARRAY *psa

SAFEARRAYBOUND rgsabound[1]

rgsabound[0].lLbound = 0

rgsabound[0].cElements = (ULONG)llPicCapacity

// 创建SAFEARRAY对象

psa = SafeArrayCreate(VT_UI1, 1, rgsabound)

for (long i = 0i <(long)llPicCapacityi++)

{

// 将strPicContent指向的二进制数据保存到SAFEARRAY对象psa中

SafeArrayPutElement(psa, &i, strPicContent+i)

}

// 将varBLOB的类型设置为BYTE类型的数组

varBLOB.vt = VT_ARRAY | VT_UI1

// 为varBLOB变量赋值

varBLOB.parray = psa

// 加入BLOB类型的数据

pRecordset->GetFields()->GetItem("Field6")->AppendChunk(varBLOB)

::VariantClear(&varBLOB)

pRecordset->PutCollect(_T("Field7"),

_variant_t((long long)llPicCapacity))

int nCount = pRecordset->RecordCount

pRecordset->Update()

1、用户上传文档后,把文档存储到某个路径下,然后在数据库中存储这个路径和文档名

2、用户上传文档后,进行二进制读取(流处理),然后把读取出来的二进制存储到数据库中

首先我们要进行读取文件

$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!")

然后把 $myfile 存储到mysql中

sql ="insert into table_name (fn) values($myfile)""

这样就把文档转变成二进制之后,存储到了mysql数据库,下次取出时,只需要把取出的数据存储到一个文档中


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9948595.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存