gpt4 book ai didi

python - 使用 Turbogears 2 上传文件

转载 作者:太空狗 更新时间:2023-10-30 01:04:01 26 4
gpt4 key购买 nike

我一直在尝试找出使用 Turbogears 2 管理文件上传的“最佳实践”方法,但到目前为止还没有真正找到任何示例。我已经找到了一种实际上传文件的方法,但我不确定它对我们来说有多可靠。

此外,获取上传文件名的好方法是什么?

    file = request.POST['file']
permanent_file = open(os.path.join(asset_dirname,
file.filename.lstrip(os.sep)), 'w')
shutil.copyfileobj(file.file, permanent_file)
file.file.close()
this_file = self.request.params["file"].filename
permanent_file.close()

所以假设我理解正确,这样的事情会避免核心“命名”问题吗? id = UUID。

    file = request.POST['file']
permanent_file = open(os.path.join(asset_dirname,
id.lstrip(os.sep)), 'w')
shutil.copyfileobj(file.file, permanent_file)
file.file.close()
this_file = file.filename
permanent_file.close()

最佳答案

我只想让来这里寻找答案的人知道 Allesandro Molina很棒的图书馆 Depot构成了这个问题的最佳答案。

它解决了命名和复制问题,并且可以很好地整合到您的 TurboGears 应用程序中。您可以将它与 MongoDB GridFS 一起使用,如本例所示:

from depot.manager import DepotManager

# Configure a *default* depot to store files on MongoDB GridFS
DepotManager.configure('default', {
'depot.backend': 'depot.io.gridfs.GridFSStorage',
'depot.mongouri': 'mongodb://localhost/db'
})

depot = DepotManager.get()

# Save the file and get the fileid
fileid = depot.create(open('/tmp/file.png'))

# Get the file back
stored_file = depot.get(fileid)
print stored_file.filename
print stored_file.content_type

或者您可以在 SQLAlchemy 中轻松创建附件字段模型,例如:

from depot.fields.sqlalchemy import UploadedFileField

class Document(Base):
__tablename__ = 'document'

uid = Column(Integer, autoincrement=True, primary_key=True)
name = Column(Unicode(16), unique=True)

content = Column(UploadedFileField)

... 然后,存储带有附件的文档(源可以是文件或字节)变得非常简单:

doc = Document(name=u'Foo', content=open('/tmp/document.xls'))
DBSession.add(doc)

Depot 支持 LocalFileStorageMongoDBGridFSStorage和亚马逊的 S3Storage .而且,至少对于存储在本地和 S3 中的文件,fileid 将由 uuid.uuid1() 生成。

关于python - 使用 Turbogears 2 上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2375290/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com