flight.file是一个高级的zope 3文件小部件,它尽最大努力表现得像其他小部件一样,即使表单由于验证错误而被重新显示。它还内置了对通过tramline快速上传和下载基于apache的文件的支持。
hurry.file的Python项目详细描述
hreach.file字段
文件小部件构建在hurryfile对象之上:
< Buff行情>>>> from hurry.file import HurryFile >>> file = HurryFile('foo.txt', 'mydata') >>> file.filename 'foo.txt' >>> file.data 'mydata' >>> file.size 6 >>> f = file.file >>> f.read() 'mydata'
如果其中两个对象的数据和文件名匹配,则hurryfile对象相等:
< Buff行情>>>> file1 = HurryFile('foo.txt', 'mydata') >>> file2 = HurryFile('foo.txt', 'mydata') >>> file3 = HurryFile('bar.txt', 'otherdata') >>> file1 == file2 True
>>> file1 != file2 False
>>> file1 == file3 False
>>> file1 != file3 True
我们还可以从类似文件的对象中创建hurryfile对象:
< Buff行情>>>> from StringIO import StringIO >>> from zope import component >>> from hurry.file.interfaces import IFileRetrieval >>> fileretrieval = component.getUtility(IFileRetrieval) >>> file = fileretrieval.createFile('bar.txt', StringIO('test data')) >>> file.filename 'bar.txt' >>> file.size 9 >>> file.data 'test data' >>> f = file.file >>> f.read() 'test data'
它的功能完全相同,但可能更易于使用:
< Buff行情>>>> from hurry.file import createHurryFile >>> file = createHurryFile('test2.txt', StringIO('another test file')) >>> file.filename 'test2.txt' >>> file.size 17
hurryfile对象通常使用zodb存储文件数据 坚持不懈。但是,文件也可以通过tramline存储。如果 电车线安装在阿帕奇,电车线负责发电 文件的ID,并将文件直接存储在文件系统上。入侵检测系统 然后作为文件数据传递到zodb中。
我们先启用电车线路。
tramline目录结构是一个包含两个子目录的目录, 一个称为"存储库",另一个称为"上载":
< Buff行情>>>> import tempfile, os >>> dirpath = tempfile.mkdtemp() >>> repositorypath = os.path.join(dirpath, 'repository') >>> uploadpath = os.path.join(dirpath, 'upload') >>> os.mkdir(repositorypath) >>> os.mkdir(uploadpath)
我们创建一个tramlinefileretrieval对象来了解这个目录, 并将其注册为实用程序:
< Buff行情>>>> from hurry.file.file import TramlineFileRetrievalBase >>> class TramlineFileRetrieval(TramlineFileRetrievalBase): ... def getTramlinePath(self): ... return dirpath >>> retrieval = TramlineFileRetrieval() >>> component.provideUtility(retrieval, IFileRetrieval)
现在让我们像tramline在上传时那样存储文件:
< Buff行情>>>> from hurry.file import HurryFile >>> file = HurryFile('foo.txt', 'mydata') >>> file.filename 'foo.txt' >>> file.data 'mydata' >>> file.size 6 >>> f = file.file >>> f.read() 'mydata'0
基础名为"1"的文件(存储在zodb中的数据将是 现在只会创建"1"):
< Buff行情>>>> from hurry.file import HurryFile >>> file = HurryFile('foo.txt', 'mydata') >>> file.filename 'foo.txt' >>> file.data 'mydata' >>> file.size 6 >>> f = file.file >>> f.read() 'mydata'1
数据现在是"1",指的是真实的文件:
< Buff行情>>>> from hurry.file import HurryFile >>> file = HurryFile('foo.txt', 'mydata') >>> file.filename 'foo.txt' >>> file.data 'mydata' >>> file.size 6 >>> f = file.file >>> f.read() 'mydata'2
在真实文件中检索文件结果:
< Buff行情>>>> from hurry.file import HurryFile >>> file = HurryFile('foo.txt', 'mydata') >>> file.filename 'foo.txt' >>> file.data 'mydata' >>> file.size 6 >>> f = file.file >>> f.read() 'mydata'3
我们还可以检索它的大小:
< Buff行情>>>> from hurry.file import HurryFile >>> file = HurryFile('foo.txt', 'mydata') >>> file.filename 'foo.txt' >>> file.data 'mydata' >>> file.size 6 >>> f = file.file >>> f.read() 'mydata'4
应该可以创建存储在 目录结构直接:
< Buff行情>>>> from hurry.file import HurryFile >>> file = HurryFile('foo.txt', 'mydata') >>> file.filename 'foo.txt' >>> file.data 'mydata' >>> file.size 6 >>> f = file.file >>> f.read() 'mydata'5
我们现在获得数据的ID:
< Buff行情>>>> from hurry.file import HurryFile >>> file = HurryFile('foo.txt', 'mydata') >>> file.filename 'foo.txt' >>> file.data 'mydata' >>> file.size 6 >>> f = file.file >>> f.read() 'mydata'6
我们可以检索文件本身:
< Buff行情>>>> from hurry.file import HurryFile >>> file = HurryFile('foo.txt', 'mydata') >>> file.filename 'foo.txt' >>> file.data 'mydata' >>> file.size 6 >>> f = file.file >>> f.read() 'mydata'7
现在让我们在实用程序中禁用tramline:
< Buff行情>>>> from hurry.file import HurryFile >>> file = HurryFile('foo.txt', 'mydata') >>> file.filename 'foo.txt' >>> file.data 'mydata' >>> file.size 6 >>> f = file.file >>> f.read() 'mydata'8
我们期望与未安装电车线时的行为相同:
< Buff行情>>>> from hurry.file import HurryFile >>> file = HurryFile('foo.txt', 'mydata') >>> file.filename 'foo.txt' >>> file.data 'mydata' >>> file.size 6 >>> f = file.file >>> f.read() 'mydata'9
清理:
< Buff行情>>>> file1 = HurryFile('foo.txt', 'mydata') >>> file2 = HurryFile('foo.txt', 'mydata') >>> file3 = HurryFile('bar.txt', 'otherdata') >>> file1 == file2 True0