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

: Blob データタイプではなく BlobFile データタイプを使用すると、データを任意の外部ストレージに保存できます。その利点から、Blob の代わりに BlobFile データタイプを使用することを強くお勧めします。

Blob とは、DBMS のさまざまな整合性チェックと制御メカニズムを利用して、画像やスプレッドシート、ビデオ、音声ファイル、各種ドキュメントをデータベースに保存できるようにするデータタイプです。
Transaction オブジェクトの UI を通じて、Blob のフィールド (Blob データタイプに基づく項目属性) を入力してデータベースに自動的に保存することができます (選択されたファイルは Web サーバー内のディレクトリーに一時的にアップロードされた後、その次の POST、すなわち、エンドユーザーが入力を確定したタイミングで、データベースに保存されます)。
これに対し、Web Panel オブジェクトの UI では、File Upload コントロールを使用して Blob データタイプ (画像、ビデオなど) を扱う必要があります。

さまざまなタイプのファイルの格納

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

[ File Type Attribute ] プロパティ

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

実行時の [ FileType ] プロパティ

このプロパティを次の構文で使用して、Blob の拡張子を取得したり動的に変更したりできます:
&extension = Attblob.FileType
[ FileType ] プロパティは、Blob がアップロードされたときに実際のファイル拡張子を返します。
たとえば、トランザクションで次のルールが定義されているとします:
msg('The uploaded file is ' + Attblob.FileName + '.' + Attblob.FileType) if not Attblob.isempty() on AfterValidate;
ファイルのアップロード時に、Attblob.FileType が実際のファイル名を返します。
ファイルのダウンロード時には、ファイルタイプは次のプロパティから取得されます:

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

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


[ File Name Attribute ] プロパティ

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

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

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

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

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

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

[ Content Type ] プロパティ

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

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

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

ファイル名の取得

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

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

[ Width ] プロパティ/ [ Height ] プロパティ

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

[ Display ] プロパティ

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

注: 

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

[ LinkTarget ] プロパティ

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

[ Parameters ] プロパティ

[ Display ] プロパティを 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 ローカル格納パスに保存されます。保存されるファイルの拡張子は、Blob の [ File Type ] プロパティの値によって決まります。
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 トランザクションで、「Uruguay」を挿入し、国旗と国歌を指定します:
イメージ: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. ファイルの [ Display ] プロパティを Inline に指定し、 [ File Type ] プロパティと [ Content Type ] プロパティも設定している場合は、IE、Netscape、Mozilla では、指定したコンテンツタイプが考慮されます。ただし、Word ドキュメントなどの例外もあります。画像など一部の MIME タイプはブラウザー内で表示可能です。ワードプロセッサのドキュメントなど、ファイルを表示するのに外部のヘルパーアプリケーションが必要なものもあります。

次の表に、ファイルタイプ (と関連付けられた拡張子) が指定された場合に、自動的に割り当てられるコンテンツタイプの一部を示します。
ファイルタイプ Content-Type
 
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
ジェネレーター: .NET Framework.NETJava
   

参考情報

Base64 における Blob
   
  

サブページ
Created: 14/09/18 03:19 by Admin Last update: 24/12/16 19:57 by Admin
カテゴリ
Powered by GXwiki 3.0