sql >> データベース >  >> RDS >> Oracle

OracleAPEXでのBLOB型列の使用

    OracleAPEXを介したBLOBデータ型での添付ファイルの保存とアクセス

    これは、BLOB型のデータ列を含む私が使用したテーブルのスキーマ設計です。注:これは最終的なソリューションの設計ではありません。 APEXフォームおよびレポート作成ウィザードのいくつかの制限について私が見つけたものを理解できるように、変更が加えられたらそれに従ってください。

    最初の試み:APEXテーブル、フォーム、およびレポートの設定

    表:MY_DOC_STACKの最初のレイアウト試行

    DOC_FILE 実際のドキュメントの添付ファイルを格納するBLOBタイプです。これは、テーブルを直接指すAPEXアプリケーションウィザードを使用して作成されたフォームとレポートの外観です。

    BLOB型付きフィールドへのドキュメントの追加

    レポートクエリは次のように機能するようです:

    ドキュメントが添付されたその他のレコードのリストは次のとおりです。

    複数のレコードを含むサンプルレポート出力

    問題は、BLOBフィールドに入力されたファイルをダウンロードしようとしたときです:

    写真からは微妙ですが、識別されたmimeタイプ:Application/Octet-Stream は、APEXフォームが、アップロードしたばかりのファイルの種類(Microsoft Word、docx)を追跡できなくなったことを示しています。保存されるファイルは、ごみの文字の集まりです。ファイル拡張子を変更しようとしても役に立ちません。

    2番目の(改訂された)試行:BLOB/ドキュメント処理のためのAPEXアプリケーション設計の調整

    ウィザードが完了した直後は、アプリケーションリージョンとそのコンポーネントは機能しませんでしたが、機能するようにするための小さな編集はわずかしかありません。フォーム要素の詳細な検査PX_DOC_FILE は、BLOBフォーム要素がレコードに添付されたファイルに関する追加のメタ情報を必要とすることを示しています。

    先に進み、追加の列を定義して、それをBLOBを含むテーブル(MY_DOC_STACK)、アップロードするApexフォーム、およびレポート領域の定義に追加しました。

    列名(簡単にするため)は、Blobフォーム要素DOC_FILEの要件と同じになっていることに注意してください。 。

    改訂されたドキュメント添付ファイルの頂点フォーム

    私は当初、Mimeタイプ(msword、pdf、zipなど)のすべての可能な値を予測するために賢くなければならないと思っていましたが、それは不要でした。文字タイプ用に予約されている他のフィールド、および最後に更新された列についても同様です。

    改訂されたドキュメントブロブアップロードレポート

    改訂されたレポート出力ディスカッション

    1. [所有者:AUDREY HEPBURN]:MIME_TYPEを強制しました 「アプリケーション/msword」への私のフォームで;アップロードしたファイルは「.docx」タイプでしたが、Apexページからダウンロードして戻すと、「。doc」形式(古いMS Word形式)としてローカルクライアントに保存されました。

    2. [所有者:CHEVY CHASE]:今回は、MIME_TYPE が入力されず、Apexフォームプロセス/アクションが作成時にこれをレコードに追加しました:

      application / vnd.openxmlformats-officedocument.wordprocessingml.document

      これはおそらくMicrosoft Office 2013で指定された形式です 。 FILE_NAME 値はユーザー定義であり、.docx拡張子が明示的に追加されました。その結果、ファイルをダウンロードすると、ユーザーはデフォルトで、クライアントコンピューター上の正しいアプリケーションであるMS Word(バージョン2013)を使用してファイルを開くようになりました。

    3. [所有者:CARRIE FISHER]:テストケース(2)と同じですが、代わりにAdobe PDF(ポータブルドキュメント形式)を使用します。 MIME_TYPE以外は同じ動作 application/pdfとして自分自身を識別しました。ファイルが期待どおりに開かれました。

    その他のディスカッション:

    この問題はすべて、Apexがアプリケーションのスキーマからの挿入、更新、削除を管理するために使用する汎用DML APIに起因します。これは、SQLインジェクション攻撃に対するApexの強化の一部である可能性があります。直接のINSERT およびSELECT SQLクライアントで使用されるステートメントは、DMLトランザクションを管理するために(アプリケーションウィザードからの)デフォルトのフォームデザインを設定する方法と同じではありません。

    ページプロセスに注意してください:Process Row of MY_DOC_STACK より多くのパラメータ駆動に見えます。どこかにDML操作がある場合は、最初にApexフォームから送信された各入力変数の注意深いスクリーニングに基づいて行われます。

    ApexがDMLトランザクションを管理する方法は他にもたくさんあります。 ...このソリューションは、OPが遭遇した可能性が最も高いものに焦点を当てています。

    幸運を祈ります!




    1. PHPでテーブルを作成し、MySQLからデータを入力します

    2. 1つのテーブル内のすべてのアイテムを選択し、別のテーブルと結合して、nullを許可する

    3. SQLServerでエラーメッセージ7325を修正する方法:「CLRタイプの列を公開するオブジェクトは分散クエリでは許可されていません」

    4. ユーザーが同じユーザー名を持つことを防ぐ