plone.api是Plone内容管理系统的一个高级Python API,它提供了简洁的接口来执行常见的Plone操作,如创建内容、管理用户和设置权限等。
当使用plone.api创建文件时出现"WrongType"错误,通常意味着你尝试创建的内容类型与目标位置允许的类型不匹配,或者传递给create方法的参数类型不正确。
from plone import api
# 错误示例:尝试在不允许文件类型的文件夹中创建文件
try:
file_obj = api.content.create(
type='File',
container=some_folder, # 如果some_folder不允许File类型
id='myfile.pdf',
title='My PDF File'
)
except Exception as e:
print(f"Error: {e}")
解决方案:
api.portal.get_tool('portal_types')
检查文件类型是否可用from plone import api
# 正确做法:先检查允许的类型
portal_types = api.portal.get_tool('portal_types')
folder_types = api.portal.get_tool('portal_types')['Folder'].allowed_content_types
if 'File' in folder_types:
file_obj = api.content.create(
type='File',
container=some_folder,
id='myfile.pdf',
title='My PDF File',
file=some_file_data # 确保提供文件数据
)
else:
print("Cannot create File in this folder")
# 错误示例:没有提供文件数据或格式不正确
file_obj = api.content.create(
type='File',
container=some_folder,
id='myfile.pdf',
title='My PDF File'
# 缺少file参数
)
解决方案:
# 正确做法:提供文件数据
with open('local_file.pdf', 'rb') as f:
file_data = f.read()
file_obj = api.content.create(
type='File',
container=some_folder,
id='myfile.pdf',
title='My PDF File',
file=file_data
)
解决方案:
api.env.adopt_roles()
临时提升权限from plone import api
with api.env.adopt_roles(['Manager']):
file_obj = api.content.create(
type='File',
container=some_folder,
id='myfile.pdf',
title='My PDF File',
file=file_data
)
解决方案:
# 获取所有可用内容类型
portal_types = api.portal.get_tool('portal_types')
print(portal_types.keys())
from plone import api
from plone.namedfile.file import NamedBlobFile
def create_plone_file(container, filename, title, file_data):
"""安全创建Plone文件的函数"""
try:
# 检查容器是否允许File类型
portal_types = api.portal.get_tool('portal_types')
if 'File' not in portal_types['Folder'].allowed_content_types:
raise ValueError("File type not allowed in this container")
# 创建文件对象
file_obj = NamedBlobFile(
data=file_data,
filename=filename
)
# 创建内容
return api.content.create(
type='File',
container=container,
id=filename,
title=title,
file=file_obj
)
except Exception as e:
print(f"Failed to create file: {str(e)}")
raise
# 使用示例
with open('example.pdf', 'rb') as f:
pdf_data = f.read()
create_plone_file(
container=api.portal.get().some_folder,
filename='example.pdf',
title='Example PDF',
file_data=pdf_data
)
通过以上方法,你应该能够解决使用plone.api创建文件时遇到的WrongType错误。
没有搜到相关的文章