最近のアクセス:
Blob データタイプ

Blob とは、DBMS のさまざまな整合性チェックと制御メカニズムを利用して、画像やスプレッドシート、ビデオ、音声ファイル、各種ドキュメントをデータベースに保存できるようにするデータタイプです。
Web インターフェース (Web トランザクション) を使用して、データベース内で Blob フィールドを自動的に保存する方法があります。Web フォームに Blob フィールドを表示する簡単な方法もあります: File Upload コントロールを生成し、オプションでコンテンツ (画像やビデオなど) を表示する組み込みウィンドウを生成します。
注: Blob データタイプではなく BlobFile データタイプを使用すると、データを任意の外部ストレージに保存できます。このメリットを活用するため、Blob ではなく BlobFile を使用することを強くお勧めします。
概要:

Blob の表示

Web フォームの Blob は、そのフィールドのコンテンツ (画像、ビデオ、音声、ドキュメントなど) に応じて自動的に視覚化されます。また、ユーザーがクリックして表示できるようにリンクすることも、Web フォームに埋め込むこともできます。
データベースに Blob フィールドを挿入したり、更新したりするために、ファイルを選択するダイアログが表示されます。エンドユーザーは、このダイアログで、クライアント PC (インターネットブラウザーが実行されている PC) のファイルシステムを参照できます。ファイルのアップロードプロセスは自動です。エンドユーザーがファイルを選択すると、そのファイルが自動的にサーバーにアップロードされてデータベースに保存されます。
ファイル選択ダイアログは、選択されたファイルをアップロードする編集コントロールに関連付けられた [ 参照 ] ボタンをクリックすると表示されます。これは「アップロードコントロール」と呼ばれます。次の画像にこれを示します:
イメージ:6708.jpg
実行時には次のようになります:
イメージ:6707.jpg
ユーザーが選択したファイルは、一時的に Web サーバーのディレクトリーにアップロードされ、次の POST (ユーザーがトランザクションを承認した時点) で、データベースに保存されます。

Blob にさまざまなタイプのファイルが格納される場合

場合によっては、複数の異なる形式のファイルを取り扱わなければならないことがあります。たとえば、データベースの同じフィールドに、Word ドキュメント、JPG 形式と GIF 形式の写真、およびビデオファイルが含まれている場合があります。
したがって、アップロード中にファイルの拡張子を取得して保存する必要がある場合があります。この情報は、同じファイルをダウンロードするときに使用できるようになります。
ファイルの拡張子の情報は、インターネットブラウザーでファイルを表示するために、その形式を認識する必要がある場合や、Web サーバーが拡張子のないファイルのアップロードを禁止している場合に便利です。
アップロードされているファイルの名前と拡張子を自動的に取得する方法があります。取得した情報は、そのファイルがダウンロードされるときにも使われます。
この主な目的は、セキュリティレベルの高いサーバーでアプリケーションを実行できるようにし、拡張子のないファイルがアップロードされないようにすることです。
テーブルの同じフィールドに異なる種類のファイル (doc、jpg、xml など) を保存する方法は 2 つあります:
 
  1. Blob をそのままで定義します。ファイルがアップロードされてダウンロードされる場合、拡張子のない一時ファイルが Web サーバーのファイルシステムに保存されます。このファイルがダウンロードされるときは、ブラウザーにファイル形式に関する情報を与えるために、ファイルにコンテンツタイプ (*) を割り当てなければならない場合があります。ブラウザーの中には、この情報が必要のないもの (例: Internet Explorer) もあります。
  2. 厳しいセキュリティポリシーを採用している Web サーバー (IIS を使用している Windows 2003 サーバーなど) では、通常、拡張子のないファイルのアップロードは許可されていません。このような場合は、アップロード時に Blob の拡張子と名前を取得できるように、Blob の [ FileTypeAttribute ] プロパティと [ FileNameAttribute ] プロパティを設定することをお勧めします。ファイルは対応する拡張子とともに一時的に保存されます。また、Blob をダウンロードする (取得する) ときにも、ファイルの拡張子と元の名前が保存されます。
イメージ:6711.jpg
次に、項目属性のプロパティについて説明します。

[ File Type Attribute ] プロパティ

Blob タイプ項目属性でのみ利用可能です。このプロパティに設定できる値は、Blob 項目属性が属するものと同じテーブルの char 項目属性または varchar 項目属性です。このプロパティは、Blob データタイプ項目属性の拡張子を持つ項目属性を識別します。Blob データタイプ項目属性はファイルを格納できます。これらのファイルは、すべて同じ形式 (Word ドキュメントのみ、または特定の形式の画像など) でも、異なる形式でもかまいません。ファイルの形式が異なっている場合は、別の項目属性にファイル形式 (拡張子) を格納する必要があります (拡張子は Blob には格納されないため)。つまり、Blob データタイプ項目属性はファイルのコンテンツを格納し、ファイルタイプ項目属性はファイルタイプ (拡張子) を格納します。
Blob データタイプの項目属性が (ユーザーインターフェース、または割り当てコマンドによって) 割り当てられるたびに、FileTypeAttribute の値も自動的に割り当てられます。つまり、Blob を Web インターフェース (Web トランザクション)、プロシージャー、またはバッチモード (プロシージャー) でビジネスコンポーネントからアップロードする場合に、FileTypeAttribute が割り当てられます。
既定値は none であり、ファイルタイプを格納する項目属性がないことを示します。
FileTypeAttribute には、次のような制限があります:
  • Character または VarChar (Long Varchar ではありません) データタイプでなければなりません。
  • 参照元の項目属性と同じテーブルになければなりません。
  • 式は使用できません。
  • ほかの Blob 項目属性の FileTypeAttribute または FileNameAttribute としては使用できません。
注: [ FileTypeAttribute ] プロパティに値が割り当てられた場合に、このプロパティに割り当てられる項目属性を Web トランザクションで明示的に変更することはできません。

[ File Type Runtime ] プロパティ

[ FileType ] プロパティについては既に説明したので、ここでは実行時のプロパティである [ File Type Runtime ] について説明します。このプロパティを次の構文で使用して、Blob の拡張子を取得したり動的に変更したりできます。

&extension = Attblob.FileType

[ FileType ] プロパティは、Blob がアップロードされたときに実際のファイル拡張子を返します。
たとえば、Web トランザクションにおいて次のルールがあるとします:

msg('The uploaded file is ' + Attblob.FileName + '.'+ Attblob.FileType) if not Attblob.isempty() on aftervalidate;

ファイルのアップロード時に、Attblob.FileType は実際のファイル拡張子を返します。
ファイルのダウンロード時には、ファイルタイプは次のプロパティから取得されます:

1. [ FileType ] プロパティ (設計モデルで割り当てられている場合)
2. Blob の [ FileTypeAttribute ] プロパティ (Blob にこのプロパティがある場合)

上記から取得できない場合は null を返します。

[ File Name Attribute ] プロパティ

 
[ FileNameAttribute ] プロパティは、Blob データタイプ項目属性のファイル名を持つ項目属性を識別します。Blob データタイプの項目属性は、ファイルを格納することができます。この項目属性はファイルのコンテンツを格納しますが、元の名前は格納しません。元のファイル名を記録したい場合は、このプロパティを設定する必要があります。

Blob データタイプの項目属性が (ユーザーインターフェース、または割り当てコマンドによって) 割り当てられるたびに、FileNameAttribute の値も自動的に割り当てられます。
既定値は none であり、元のファイル名は失われます。

FileNameAttribute には、次のような制限があります:
  • 文字または VarChar (Long Varchar ではない) データタイプである必要があります。
  • 参照元の項目属性と同じテーブルになければなりません。
  • 式は使用できません。
  • ほかの Blob 項目属性の FileTypeAttribute または FileNameAttribute としては使用できません。
注: ファイルをダウンロードする際、ファイルは元の名前 (FileNameAttribute から取得したもの) およびランダムな数字とともに一時的に保存されます。つまり、複数のユーザーがいる環境や同時使用する環境でアプリケーションを実行できるように、ファイルごとに異なる名前が付きます。

異なるコンテンツタイプの管理

コンテンツタイプは、Web や電子メールで、Web ページ、画像、およびマルチメディアファイルを識別する方法です。Web ブラウザーおよび電子メールクライアントによる、正しく安全な方法でのコンテンツの表示を可能にします。Blob の場合は、特定の種類のファイルやインターネットブラウザー向けにコンテンツタイプを設定しなければならない場合があります。一般的に使用されるコンテンツタイプには、text/html、image/jpeg、model/vrml、video/quicktime などがあります。

GeneXus では、拡張子に基づいて、各 Blob の対応するコンテンツタイプが自動的に生成されます。ただし、このコンテンツタイプは、ユーザーが変更することもできます。
その方法は 2 とおりあります。
[ ContentType ] プロパティ (設計時および実行時のコントロールプロパティ)
イメージ:6718.jpg イメージ:6712.jpg

[ ContentType ] プロパティ

Blob と関連付けられる必要のあるコンテンツタイプを示します。たとえば、.wav ドキュメントのコンテンツタイプは一般的に audio/wav であり、.xml ファイルの場合は text/xml です。

コンテンツタイプはブラウザーに依存するため、GeneXus ユーザーがプログラムで設定できるようになっています。ただし、対応するコンテンツタイプは、実際には生成されたプログラムの実行時に決定されます。
そのため、Blob に FileType 項目属性が関連付けられている場合は、通常、 [ FileType ] プロパティだけを設定するか、何も設定しません。これは、GeneXus によって、この情報を基に自動的にコンテンツタイプが決められるからです。

[ ContentType ] プロパティは、拡張子によってコンテンツタイプを識別できない場合や、GeneXus ユーザーがエンドユーザーのブラウザーに適したコンテンツタイプを設定したい場合に使用します。

ファイル名の取得

[ FileName ] プロパティ (実行時のプロパティ) を使用してファイル名をクエリできます。これは読み取り専用のプロパティです。Blob に関連付けられたファイル名を示します。ファイルのアップロード時に、アップロードされているファイルの名前を返します。たとえば、Web トランザクションにおいて次のルールがあるとします:
msg('The uploaded file is ' + Attblob.FileName + '.'+ Attblob.FileType) if not Attblob.isempty() on aftervalidate;
ファイルのアップロード時に、Attblob.FileName が実際のファイル名を返します。一方、ファイルのダウンロード時 (Web パネルにある場合など) に、プロパティによって返される値は、FileNameAttribute に独占的に格納されている値に基づきます。これは、Blob 自体は、バイナリファイル以外の情報を格納しないためです。ファイルの拡張子やファイル名は格納しません。

表示コントロールプロパティ

Width と Height

フォームの Blob コントロールの幅と高さを指定します。

Display

フォーム内での Blob コンテンツの表示方法を示します。設計モデルと実行時に指定できます。有効な値は次のとおりです。
 
イメージ:6707.jpg
イメージ:6713.jpg

注:

プロパティに 0 または 1 以外の値を定義すると (実行時のみ)、Blob は Inline および Link のどちらでも表示されません。

LinkTarget

表示プロパティが Link に設定されている場合、このプロパティによって、Blob のコンテンツを別ウィンドウで表示する選択が可能です。
次に例を示します: blobatt.linktarget = '_blank'

パラメーター

表示プロパティを Inline に設定し、インターネットブラウザーで Blob コンテンツを取り扱うのに追加情報が必要な場合は、 [ Parameters ] プロパティを使用して、ブラウザーに必要な情報を提供する必要があります。
たとえば、Internet Explorer で .mpg 形式のビデオを表示するには、次のように設定します:
(この例は Windows Media Player で動作します)
blobatt.parameters = '<param name="Filename" value="' + pathtourl( blobatt) + '">' +
'<param name="AutoStart" value="True">' +
'<param name="ShowControls" value="True">' +
'<param name="ShowStatusBar" value="True">' +
'<param name="ShowDisplay" value="False">' +
'<param name="AutoRewind" value="True">'
注: インターネットブラウザーは、どのアプリケーションを使用してファイルを表示すればよいかが分からなければなりません。そのために、 [ ContentType ] プロパティを使用します。たとえば、Internet Explorer で .mpg 形式のコンテンツを表示する場合は、ContentType を application/x-mplayer2 ではなく、既定の video/mpg に設定する必要があります。この場合は、ContentType はファイルの実際のコンテンツのタイプではなく、コンテンツを表示するのに使用するアプリケーションを示します。

環境プロパティ

[ Blob Local Storage Path ] プロパティ

この環境プロパティは、データベースから取得されたファイルが一時的に保存される場所の Web サーバーパスを設定するために使用されます。つまり、データを取得すると、一時ファイルは Blob ローカル格納パスに保存されます。保存されるファイルの拡張子は、File Type という Blob プロパティの値によって決まります。
Blob の [ Blob Local Storage Path ] プロパティで指定した場所は、仮想ディレクトリーからアクセスできなければなりません。たとえば、仮想ディレクトリーが「C:\resin-2.0.2\webapps\test」の場合に、このプロパティに設定できる値の 1 つは次のとおりです:「C:\resin-2.0.2\webapps\test\resources\rtrepository」。

Temporary Media Directory

この環境プロパティは、データベースにロードされたファイルが一時的に保存される場所の Web サーバーパスを設定するために使用されます。つまり、Blob が追加または更新された場合は、このディレクトリーに一時的に保存されます。
Temporary Media Directory は、仮想ディレクトリーからアクセス可能である必要があります。

Blob データタイプの使用例を示します。Country トランザクションを作成するとします。Country トランザクションの項目属性は、CountryId、CountryName、CountryFlag、CountryAnthem です。後ろの 2 つが Blob タイプで、それぞれ国旗と国歌を格納できます。
イメージ:33109.png
Blob タイプ項目属性のプロパティに移動し、CountryFlag の [ File Type ] プロパティを png に、CountryAnthem の [ File Type ] プロパティを wav に設定します:
イメージ:33110.png   イメージ:33111.png
最後に、F5 キーを押します。Country トランザクションで、ウルグアイを挿入し、国旗と国歌を指定します。
イメージ:33112.png

:

関数

PathToURL 関数

付録

I. 一般に、Internet Explorer は、Web サーバーによって返されるコンテンツタイプを考慮せず、さまざまな方法でファイルのコンテンツタイプを自動的に検出します。

つまり、ブラウザーによって動作が異なります。たとえば、Blob フィールドがダウンロード用リンクとして表示され、コンテンツタイプが指定されている場合、IE は上記の手段を使用してフォーム内の Blob の表示方法を決定します。そのため、コンテンツタイプはブラウザーによってヒントとしてのみ考慮されます。
Mozilla の場合は、指定されたコンテンツタイプを常に考慮します。そのため、ブラウザーのドキュメンテーションを読み、アプリケーションでどのように対処すればよいかを確認することをお勧めします。

弊社で行ったテストの結果は、次のとおりです:

1. Blob がリンクとして表示されている場合は、IE はコンテンツタイプを無視します。IE は、独自のルールによってコンテンツタイプを認識するので、ユーザーが指定したものは無視します。Netscape でも同様です。そのため、ブラウザーで認識可能な形式のファイルだけが、HTML で正しく表示されます。この問題を解決するには、一時的に保存する際に [ FileType ] プロパティでファイルに拡張子を付加します。この問題は、Mozilla FireFox では発生しません。

2. [ FileType ] プロパティを設定した場合、Blob は拡張子とともにサーバーに一時的に保存されます。この場合、Web サーバーが MIME Type によってコンテンツの表示方法を決定し、指定されたコンテンツタイプは無視されます。たとえば、Word ドキュメントの Blob は、リンクとして表示され、拡張子が関連付けられている (FileType を指定している) 場合のみ、正しく表示されます (Excel ワークシートでも同様です)。

3. Blob がインライン表示され、関連付けられた拡張子 (File Type) を有する場合、IE はコンテンツが表示されてないことがあります。また Netscape および Mozilla では、ダウンロードを試みることがあります (たとえば、.doc、.xls、.pdf の拡張子を持つ場合)。

4. ファイルの表示プロパティを Inline に指定し、File Type と Content Type も設定している場合は、IE、Netscape、Mozilla では、指定したコンテンツタイプが考慮されます。ただし、Word ドキュメントなどの例外もあります。画像など一部の MIME タイプはブラウザー内で表示可能です。ワードプロセッサのドキュメントなど、ファイルを表示するのに外部のヘルパーアプリケーションが必要なものもあります。

次の表に、ファイルタイプ (と関連付けられた拡張子) が指定された場合に、自動的に割り当てられるコンテンツタイプの一部を示します。
ファイルタイプ コンテンツタイプ
 
TXT text/plain
RTX text/richtext
HTML/HTM text/html
XML text/xml
AIF audio/x-aiff
AU audio/basic
WAV audio/wav
BMP image/bmp
GIF image/gif
JPE/JPEG/JPG image/jpeg
JFIF image/pjpeg
TIF image/tiff
MPEG video/mpeg
MOV/QT video/quicktime
AVI video/x-msvideo
EXE application/octet-stream
PS application/postscript
PDF application/pdf
TGZ application/x-compressed
PNG image/x-png
ZIP application/x-zip-compressed
GZ application/x-gzip
DLL application/x-msdownload

II. 実行時における Temporary Media Directory および Blob ローカル格納パスの変更

Java ジェネレーターで Temporary Media Directory と Blob ローカル格納パスを実行時に変更するには、client.cfg を変更します。次に例を示します:
TMPMEDIA_DIR=C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\YIBLOB\TempMedia

CS_BLOB_PATH=C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\YIBLOB\media

Blob のコンテンツが画像、ビデオ、またはオーディオに限定される場合、Blob データタイプの代わりに ImageVideo、または Audio データタイプの使用を考慮する必要があります。
  • [ FileType ] プロパティ (設計時および実行時のコントロールプロパティ)
  • 0: Inline: Blob はフォーム内のアップロードコントロールの上に表示されます。
  • 1: Link: Blob へのリンク付きの画像が表示されます。
  • セキュリティ上の理由により、2 種類のプロパティが用意されています。ただし、GeneXus ユーザーはこれらが同じ物理ディレクトリーをポイントするように設定できます。Blob ローカル格納パスには、常にユーザーがアクセスできるようになります。
  • アプリケーションは、これらのディレクトリーの読み取りと書き込み権限を持っている必要があります。
  • .NET ジェネレーターでは、既定で、 [ Temp Media Directory ] プロパティと [ Blob Local Storage Path ] プロパティは、モデルディレクトリーの下にある Web フォルダであると見なされます。
  • Java ジェネレーターでは、両方のディレクトリーが存在している必要があります。これらのディレクトリーが、GeneXus により自動的に作成されることはありません。

適用範囲

オブジェクト: Transaction オブジェクトWeb Panel オブジェクト
言語: .NET、Java

参考情報

Base64 における Blob











サブページ
Created: 14/09/18 03:19 by Admin Last update: 22/04/05 18:20 by Admin
カテゴリ
Powered by GXwiki 3.0