• 締切済み

oo4oによるBLOBデータ取得

ASPで作成したPDFバイナリデータをOracleにBLOB型で格納して、Perlからoo4oで参照する処理を作成しております。 PerlからBLOBデータを取得することはできたのですが、ところどころコードが変わっており、PDFデータとして認識されません。 格納したPDFデータをASPでは正常に参照できているため、格納されているデータに問題はないと思っております。 なんとか情報を集めて下記コードを作成しましたが、ご指摘などありましたら、宜しくお願いいたします。また、別の方法などありましたら教えてください。 [Perlソース(主要部分抜き出し)] #セッション作成 $objSs=Win32::OLE->new('OracleInProcServer.XOraSession'); #DB接続 $objDb=$objSs->OpenDatabase($strOraSid,$strOraIdPwd,0); #PDFデータ取得SQL作成 $strSQL="SELECT PDF_DATA FROM PDF_DATA_WRK WHERE SID = '$strID'"; #ダイナセット取得 $objDs=$objDb->CreateDynaset($strSQL,0); #GetChunkでPDFデータ取得 my $chunkSize=50000; my $sPos=0; my $wk_buf=""; my $getSize=0; my $buf_pdf=""; do{ $wk_buf = $objDs->{Fields}->Item('PDF_DATA')->GetChunk($sPos,$chunkSize); $getSize = length($wk_buf); $buf_pdf .= $wk_buf; $sPos += $getSize; } until ($getSize < $chunkSize); $objDs->Close(); [ここまで]

  • Perl
  • 回答数1
  • ありがとう数6

みんなの回答

回答No.1

はずしてるかもしれませんが、 binmode(STDOUT); が抜けているとか?

wiggle19
質問者

補足

取得したデータを出力するときは「binmode(STDOUT);」で 行っています。 念のため、プログラムの最初に「binmode(STDOUT);」を 入れてみましたが、結果は同じでした。 なお、バイナリエディタで確認したところ、 コードが変換されてしまう一部の例は下記になります。 ・「0x86」→「0x3F」 ・「0x98 0x28」→「0x3F」 ・「0xE9 0x0F」→「0x3F」 「0x3F」はアスキーコードで「?」なので、文字コードが 認識できていないということだと思うのですが、 オラクルからデータを取得するときに、文字コード絡みの 設定が必要なのでしょうか?

関連するQ&A

  • LWPで応答データを取得できない

    お世話になります。 perl5でLWPを使用しているのですが、一部のサイトでデータを取得できず困っております。 具体的には my $ua = LWP::UserAgent->new; $ua->agent('Mozilla/5.0'); my $req = HTTP::Request->new(GET => "http://misshiki.blog7.fc2.com/?xml"); my $res = $ua->request($req); my $buf = $res->content; といった感じでRSSを取得したいのですが、$bufが空になってしまいます。 しかし、 $res->as_string とすると、レスポンスヘッダも含めてRSSが取得できていることが確認できます。 また、上記以外のURLでは正常に$res->contentでデータを取得することができています。 どうもFC2ブログのRSSのみの事象のようではあるのですが、対処方法がわからず困っております。 対策をご教授いただければ幸いです。 以上、よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • mysqlのblob型の画像表示について

    テーブルの項目にblob型を作成し、 phpでテーブルから取得した画像を画面に表示させたいのですが、 以下のように表示させることは可能でしょうか? test.php ---------- ここから画面 ---------------------------------------- 取得したblob型の画像その1.jpg 取得したblob型の画像その2.gif 取得したblob型の画像その3.png それぞれの画像の説明 ---------- ここまで画面 ---------------------------------------- テーブルへのデータ挿入はphpMyAdminから挿入しています。 header('Content-type: image/jpeg'); echo SQLで取得した値; のようにすればjpg画像は表示できましたが、gif画像とpng画像は表示できませんでした。 また、jpg画像のみを表示させることは出来ましたが文章を表示させることはできませんでした。 上記のように一つのphpファイルで複数表示させるのはできないのでしょうか?

    • ベストアンサー
    • PHP
  • Oracle BLOB→Byte→.tif の変換

    こんばんわ。 タイトル通り、OracleのBLOB型の画像データをjavaのByte型に変換し、それをtiffファイルに変換したいのですが、Javaを始めたばかりで調べてもわかりませんでした。みなさんのお力をお借りしたいのですが・・・。 とりあえず、以下のソースでBLOB型のデータを取得し、byte型に変換まではできたのですが、これからこのバイトデータを.tifファイルへと変換するのがどうしてもわかりません。 ご回答お願いいたします。 ---------------------------------------------------------------- public class Image{ private byte[] imgData; public Blobconvert() { } public Blobconvert(byte[] image) { this.imgData = imgData; } public Blobconvert(InputStream imgData) throws IOException { byte[] buf = new byte[4096]; ByteArrayOutputStream bos = new ByteArrayOutputStream); while (true) {    int len = imgData.read(buf); if (len == -1) break; bos.write(buf, 0, len); } this.imgData = bos.toByteArray(); bos.close(); } public Blobconvert(Blob imgData) throws SQLException, IOException { this(imgData.getBinaryStream()); } } ---------------------------------------------------------------- Blob blbImage = rs.getBlob("SendFile");//SQL文の結果 Blobconvert listModel = null;          if (blbImage != null) listModel = new Blobconvert(blbImage); else listModel = new Blobconvert(); ----------------------------------------------------------------

  • VB.への入力データをASPで取得するには?

    ASPを始めたばかりなのですが、困っています。 VB.netでつくったexeにユーザーが入力した値を取得してDBに格納、という作業なんですが、データ取得の処理をASPで書くにはどうすればいいのでしょうか? やり方のアドバイス、参考になるサイトなどありましたら、ぜひ教えてください。 よろしくお願いします。

  • フォームデータの取得。どこに格納されている?

    Perlからの乗り換え者です。 データベースとの連携が非常に楽なので詳しく勉強したいのですが、参考書が少ないので悪戦苦闘してます。 Perlではフォームの送信データは環境変数QUERY_STRINGやSTDINで取得することができますが、PHPの場合はどうやって取得するのでしょうか? PHPでも特定の環境変数に格納されているのですか? また、Perlのcgi-lib、ReadParseのような技もあるのでしょうか? 参考書のサンプルを見ても当たり前のようにさっと書いてあるだけで、どこがデータ取得の記述か分かりません。 たぶん質問No.146も同じようなことを質問されているような気がするのですが、私の場合、それ以前のもっと基本的な問題のようです。 GETの場合とPOSTの場合、両方教えていただけると助かります。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • ファイルへのリンクの作成手法について(BLOBなどの利用)

    現在、OracleDBを利用してWebアプリケーションの開発を行っています。 作成予定のアプリは、 ある製品の一覧リストを作成して、そこからPDFファイルへのリンク、一覧に製品画像ファイルを表示、・・・ といったアプリケーションです。 そこで、PDF、画像ファイルの管理方法をどのようにしようかと悩んでおります。 方法としては、以下の2つの方法があるかと思います。 (1)ファイルはサーバにFTPでアップロードして、DB側でファイルパスを管理する。 (2)OracleDBにて、BLOBなどのデータ型を利用してDBのカラム内にファイルを格納する。 今社内にあるアプリは、(1)の方法が採用されているようですが、ファイルとパスを2重管理しなくてはいけない、という問題があります。 (2)については、たぶん技術的には可能だろうと思っていますが、今までにそのようなアプリを見たことが無いため、戸惑っております。 一般的にはどちらの手法が用いられるのでしょうか? また(2)の場合の問題点として、どのようなことが考えられますでしょうか? 以上、宜しくお願い致します。

    • ベストアンサー
    • Java
  • DBからPDFを取得して別画面で表示したい

    あるページにリンクが貼り付けてあります。 このリンクをクリックすると、 DB(SQL Server)からPDFファイルを取得し 別画面で表示するようにしたいと思っています。 ソースは下記のように書きました。 画面側(XXX.asp) <a href="../common/AAAAA.asp" target="_blank"><img src="images/banner.jpg" border="0" /></a> 呼び出され側(AAAAA.asp) Dim st Dim imgdata Dim rs Dim strSQL Dim column strSQL = "SELECT ファイル " strSQL = strSQL & "FROM 画像 " strSQL = strSQL & "WHERE ファイル名 = 'ファイル名' " 'レコードセット Set rs = querySql( conn, strSQL )     imgdata = rs.fields("ファイル").value Response.ContentType = "application/pdf" Call Response.AddHeader("Content-Transfer-Encoding", "binary") Call Response.AddHeader("Cache-Control", "no-cache") Call Response.AddHeader("Pragma", "no-cache") Call Response.BinaryWrite(imgdata) このようにすると画面には表示されるのですが IE7で表示したときのタブの部分は どうやったら指定できるのでしょうか? 「PDFファイル」と表示させたいです。 よろしくお願いします。

  • read(buf,int,int)メソッドで1文字取得する

    javaを使ってプログラミングを勉強しています。 read(buf,int,int)メソッドで受信したバイトデータをbufに格納していると思うのですが、 格納したバイトの最後の文字を取得する方法が分かりません。 送信側では送信バイトの最後の文字をsにして送信します。 受信側では読み込んだバイトデータの最後の文字がsだったら、 ループを抜けるというようにしたいのです。 どうやって最後の文字を取得するのでしょうか?

    • ベストアンサー
    • Java
  • アクセス2003 VBA データの抽出方法について

    いつもお世話になっています。 どなたかアクセス2003を使用してのデータ抽出のSQL文を教えてください!! 具体的には、同列にデータの種類が多いために、データの抽出を細かく指定できなく、”除外”するような形で抽出を試みたいのですが、、うまくいかないんです。。どうぞよろしくお願い致します! (明日までに作成しないと・・・(><)) ○開発環境 アクセス2003 SQLServer2000 strSQL = "SELECT * FROM WK基本データ INNER JOIN TB都道府県 ON WK基本データ.所属都道府県 = TB都道府県.都道府県CD " '↓ここから条件が始まります↓ '(所属都道府県の01と06を除く、A列とB列のデータを抽出する) strSQL = strSQL & "WHERE (A列 = 'S' OR A列 = 'F') " strSQL = strSQL & "AND (B列 = 'S2' OR B列 = 'S3') " strSQL = strSQL & "AND 所属都道府県列 <> '01' AND 所属都道府県列 <> '06' " '↓ここからが分からないです!。(下記の内容だと得たいデータは得られず・・・)↓ '除外用のデータを抽出し、除外します。 '(所属都道府県の10を除く、B列とC列のデータを抽出する。) ’(A列の条件は上記と同じとする。C列が追加された。) strSQL = strSQL & "AND NOT(所属都道府県列 = '10' AND C列 = 'I' " strSQL = strSQL & "AND B列 = 'S1' OR B列 = 'SW1') " アクセスのAND や OR や NOT などの使用方法がいまいち理解できていないのだと思うのですが、、、どうやってもできませんでした。 どなたか助けてください!!よろしくお願い致します!!

  • MySQLのblob型の日本語文字列を取得すると文字化けする

    MySQLに接続し、Blob型の日本語データを取得したのですが、 文字化けしてしまいます。 new Stringを使っているのですが、うまくいきません。 今は以下のような流れになっております。 まずstr_orgにデータを格納して、次にnew Stringで変換してstr_chgに格納しております。 しかしstr_chgの文字列が文字化けしてしまいます。 何が原因か分かりますでしょうか? ちなみに現在は、my.confで[default-character-set=]の設定はは行なっておりません。 String url = "jdbc:mysql:///DATABASE?useUnicode=true"; String usr = args[0]; String pwd = args[1]; Srting key = args[2]; Connection con = DriverManager.getConnection(url,usr,pwd); PreparedStatement pstmt; pstmt = con.prepareStatement("SELECT * from quote_hdr WHERE qh_id = ?"); pstmt.setString(1,key); rs = pstmt.executeQuery(); String str_org = rs.getString("qh_cmts"); String str_chg = new String(qh_cmts.getBytes("8859_1"));

専門家に質問してみよう