上傳檔案到SQL SERVER資料庫,并可從資料下載保存為檔案,上傳下載均有進度條;實作C/S模式通過資料庫在線升級
碰到點問題:
cb 對這個 資料流的函式不太熟悉
對 資料流的入庫不熟,
有做過的兄弟能否指點下.
比如插入怎么插 ,檔案太大是否需要分解?
uj5u.com熱心網友回復:
CB對資料庫操作,最簡單的方式就是ADO咯,不知道樓主干嘛把檔案存入資料庫中,很少見這種做法哦uj5u.com熱心網友回復:
超大檔案不要直接存入資料庫,小檔案可以存人,畢竟方便,如果檔案很大最好是分解成一段一段地存入uj5u.com熱心網友回復:
大檔案不是說不能存,是不便于上傳下載,最理想的做法是用一個專門的表,至少兩個欄位,一個存二進制流資料,一個欄位存這段流的CRC校驗碼,這樣可以實作斷點繼傳,用的時候組合起來uj5u.com熱心網友回復:
目前主流資料庫都支持很大的二進制資料存盤,流行的做法一是直接存入,二是建立單獨的FTP,各有優缺點uj5u.com熱心網友回復:
如果是大檔案的話用資料庫并不太好,因為資料庫的檔案io能力比不上檔案系統之身的。uj5u.com熱心網友回復:
小檔案來的,就是用來更新的程式而已.幾m到幾十m 了
內網來的,用資料庫方便,不需要額外部署 ftp,等
uj5u.com熱心網友回復:

分享個 bcb作的 上傳函式
bool __fastcall TForm2::Upfile(void)
{
TFileStream *MyFStream;
TFileStream *MyFStream2;
TFileStream *FieldStrm;
TFileStream *Buffer;
int bufsize=0xF000;
int n=0xF000; //每次上傳檔案流為61440 byte = $F000
int Counter;
int post=0;
MyFStream=new TFileStream(Edit1->Text,fmOpenRead);
Counter=MyFStream->Size;
MyFStream2=MyFStream;
byte *fileData ;
fileData=https://bbs.csdn.net/topics/new byte[Counter];
String filename;
String filetype;
filename=MyFStream->FileName;
MyFStream->Read(fileData,Counter);
AnsiString SQLStr,rq;
AnsiString oldver,newver,softname,tempmem,tempvid,temptime;
AnsiString temppath;
tempvid=FormatDateTime( "MMDDhhmmss",Now());
Efileno->Text=tempvid;
oldver=Coldver->Text.Trim();
newver=Enewver->Text.Trim();
temppath=Efilepath->Text.Trim();
Efilesize->Text=Counter;
softname=Efilename->Text;
tempmem=Mfilememo->Text;
temptime=FormatDateTime( "YYYY-MM-DD hh:mm:ss",Now());
SQLStr="insert into Updatesoft (v_id,old_ver,new_ver,softname,path,FILESIZE,memo,UPTIEM) values ( '"+ tempvid +"','"+ oldver +"','"+ newver + "','"+ softname + "','"+temppath+"','"+Counter+ "','"+tempmem+"','"+temptime+"')";
Form2-> Memo1->Lines->Add(SQLStr);
if(DM->ADOConnection->Connected)
{
if(DM->QueryExecute(SQLStr))
{
Form2-> Memo1->Lines->Add("資料插入成功");
}
}
AnsiString sSQL;
sSQL.sprintf("Select * From Updatesoft Where v_id='%s'",tempvid);
if(!DM->QueryOpen(sSQL))
{
ShowMessage("未找到記錄!");
return false;
}
if(!DM->QuerySQL->FieldByName("SOFT")->IsNull)
{
ShowMessage("KONG");
return false;
}
DM->QuerySQL->Edit();
// DM->ADOQuery1->Edit();
TBlobField *pField = (TBlobField*)DM->QuerySQL->FieldByName("SOFT");
// pField->Assign(fileData);
pField->LoadFromStream(MyFStream2);
DM->QuerySQL->Post();
MyFStream2->Free();
}
uj5u.com熱心網友回復:
你這都會了,還有什么問題啊,我看干脆結貼吧uj5u.com熱心網友回復:
資料庫, 上傳下載有進度條這可是有點難
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/125625.html
標籤:基礎類
下一篇:c++程式設計 日期與時間顯示
