全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2434
推到 Plurk!
推到 Facebook!

轉檔案 & Base64 編碼的問題

尚未結案
xfile
初階會員


發表:21
回覆:80
積分:25
註冊:2004-10-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-11-02 17:29:59 IP:220.130.xxx.xxx 未訂閱
各位好,我參考了一下站上許多資料,最後決定還是問一問比較快  :Q    小弟有個程式,要開啟圖形檔然後經過 Base64 編碼再轉成 blob  塞進資料庫裡,BCB 的 IdBase64Encoder 元件只能吃 AnsiString, 所以讀出來的 MemoryStream 要轉成 AnsiString,我知道我的轉法很草率, 可是我沒辦法了  orz    讀出來的圖老是出錯,以下是我存圖的主要程式片段    
                TMemoryStream*  Temp_ms = new TMemoryStream() ;
                AnsiString CodeString ;                    Temp_ms->LoadFromFile( "圖形檔名" ) ;
                Temp_ms->Position = 0 ;
                CodeString.SetLength( Temp_ms->Size ) ;
                Temp_ms->ReadBuffer( CodeString.c_str() , CodeString.Length() ) ;                    IdBase64Encoder1->CodeString( CodeString ) ;
                CodeString = IdBase64Encoder1->CompletedInput();
                Temp_ms->Clear() ;
                Temp_ms->Position = 0 ;
                Temp_ms->WriteBuffer( CodeString.c_str() 2 , CodeString.Length()-2 ) ;
                //把 AnsiString 轉出來的前置無用字元砍掉                    if ( ADOConnection1->Connected )
                {
                        ADOQuery1->Close() ;
                        ADOQuery1->SQL->Clear() ;
                        ADOQuery1->Parameters->Clear() ;
                        ADOQuery1->SQL->Add("INSERT INTO photo_info (p_binary)");
                        //photo_info 資料表中的 p_binary 是 longblob 形式的欄位,存圖形資料
                        ADOQuery1->SQL->Add("VALUES (:p_binary)" );
                        ADOQuery1->Parameters->ParamByName("p_binary")->LoadFromStream(Temp_ms , ftBlob)  ;
                        ADOQuery1->ExecSQL() ;
                }
轉成 AnsiString 的部份應該是問題所在,因為同樣的圖用 php 做就沒事, 用這程式就不一定,而且大圖幾乎必死。 請問各位有什麼解決的辦法嗎 ? 發表人 - xfile 於 2005/11/02 17:40:57
xfile
初階會員


發表:21
回覆:80
積分:25
註冊:2004-10-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-11-03 17:26:02 IP:220.130.xxx.xxx 未訂閱
引言: 各位好,我參考了一下站上許多資料,最後決定還是問一問比較快 :Q 小弟有個程式,要開啟圖形檔然後經過 Base64 編碼再轉成 blob 塞進資料庫裡,BCB 的 IdBase64Encoder 元件只能吃 AnsiString, 所以讀出來的 MemoryStream 要轉成 AnsiString,我知道我的轉法很草率, 可是我沒辦法了 orz
發現因為是檔案裡有 0x00 的關係,轉成字串會被截掉 但是不轉成字串,又沒辦法給 IdBase64Encoder 元件用 :(
xfile
初階會員


發表:21
回覆:80
積分:25
註冊:2004-10-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-11-04 16:43:30 IP:220.130.xxx.xxx 未訂閱
引言: 發現因為是檔案裡有 0x00 的關係,轉成字串會被截掉 但是不轉成字串,又沒辦法給 IdBase64Encoder 元件用 :(
解決了 !! 轉完後與 php 轉出來的 base64 編碼發現,只有最後面一段約 2k 大小的碼 跑得出來,前面的碼統統不見了。 用 SetBufferSize 把 IdBase64Encoder 的 Buffer 加大就可以了
系統時間:2024-03-29 0:19:46
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!