Upload, Insert and Retrieval of BLOBs
原文: http://www.zope.org/Members/murphy/MySQL-BLOBs
をかなり適当ですが訳してみました。
BLOBのアップロードおよびインサートと検索について 作者murphy 最終更新日2002/12/22
この文書はBLOBの取扱について説明したものです。イメージデータの扱いについてZope 2.5.1とMySQL上に特化しています。 他のDBMSにこの手続きを容易に適応させることができるでしょう。MIMEタイプ、あるいはCLOBに。 Python、Z SQLMethod?およびHTMLについての知識はこのHow-Toを理解するために必須です。
次のサンプルは、あなたが誰かの写真をアップロードしたい、MySQLのPhotoテーブルにそれを挿入する、と仮定し、 以下の様にテーブル属性を定めます。
Name Type Person_ID INT UNSIGNED, primary key Pic BLOB, not null Type VARCHAR(4), not null
また、あとからZopeドキュメント上で検索し表示します。
--------------------------------------------------------------------------------
<form action="newPhoto.py" method="post" enctype="multipart/form-data">
<input name="pid" type="hidden" value="&dtml-ID;">
<input name="Photo" type="file" maxlength="65535" accept="image/*">
<input type="submit" value="Insert Picture">
</form>
アップロードされたデータのサイズにより、ポストメソッドを使用しなければなりません。hiddenフィールドはDTML namespaceの中の変数から検索されて、person's IDを提供します。属性maxlengthおよびacceptmay、ファイル入力のために与えられるが、すべてのブラウザーにかならずしもサポートされるとは限りません。したがって、イメージのこの特性は、処理スクリプトの中で再びチェックされるべきです。
photo = container.REQUEST.form['Photo']? filedata = photo.read() filetype = string.split(guess_content_type(photo.filename)[0]?, "/")
allow_module(OFS.content_types.guess_content_type)
in the file PATH-TO-ZOPE/lib/python/Products/GlobalModules?/__init__.py
PATH-TO-ZOPE/lib/python/Products/GlobalModules?/__init__.pyファイルの中で
警告: 機能およびモジュールの実行にこの方法を与えることはあなたのZopeシステムおよびスクリプトでセキュリティ問題を発生させるかもしれません。よりよい解決は言及された機能にアクセスするExternal Methodの使用になるでしょう。External Methodが使用できる今、Zope Class、Imageファイルをまた分類します。したがって、私はこのセキュリティ問題をそれほど重要とみません。 とにかく、ここでのように非常に限定的で単一の機能(全体のモジュールのためにではなく)のためにならアクセス許可されるべきです。
from OFS.content_types import guess_content_type
context.insertPhoto(Person_ID=container.REQUEST.pid, Pic=filedata, Type=filetype[1]?)
insert into Photo
set
--------------------------------------------------------------------------------
select Pic, Type
from Photo
where
PIDによりこのメソッドを呼んで、レスポンスのために正確なMIMEタイプをセットしイメージ・データを返すことは、 fetchPhotoとつけた別のパイソン・スクリプトの中で起こります(それは主として3行のラインから成る):
photo = context.getPhoto(Person_ID = pid)
container.REQUEST.RESPONSE.setHeader(content-type, image/ + photo[0]?.Type)
return photo[0]?.Pic
<img src="fetchPhoto?pid=&dtml-ID;" alt="Photo">
allow_module(OFS.content_types.guess_content_type)
in the file PATH-TO-ZOPE/lib/python/Products/GlobalModules?/__init__.py
ここがわからん。GlobalModulesの__init__.pyってどこにあるの?
from Products.PythonScripts?.Utility import allow_moduleが必要。
| Last edited Mon, 11 Sep 2006 13:48:30 +0900 | Edit this page |