使用 plone.api 创建文件的脚本 Python 在设置文件时出现错误 WrongType

Script Python using plone.api to create File appear error WrongType when set a file

亲爱的,

我正在创建一个脚本 python 以在 Plone 站点批量上传文件,安装的是 UnifiedInstaller Plone 4.3.10。

这个脚本读取一个txt,这个txt用分号隔开,在新建项目中设置文件时出现这个错误。

看剧本。

from zope.site.hooks import setSite
from plone.namedfile.file import NamedBlobFile
from plone import api
import transaction
import csv

portal = app['Plone']
setSite(portal)
container = portal['PROCESSOS']

with open('CARGA/C008_0002.txt', 'rb') as csvfile:
    reader = csv.DictReader(csvfile, delimiter=';', quotechar='|')
    for row in reader:
        pdf_id = 'P'+str(row['IMAGEM']).strip('Pasta Geral\ ')
        file_obj = api.content.create(                          
            container, 'File',
            title=str(row['INTERESSADO']),
            id=pdf_id,
            description=str(row['CNPJ / CPF'])+' '+str(row['ASSUNTO']),
            safe_id=True
        )
        pdf_path = 'INMEQ/'+str(row['IMAGEM']).replace("\", "/")
        print(pdf_path)
        file_obj.file = NamedBlobFile(
            data=open(pdf_path, 'r').read(),
            contentType='application/pdf',
            filename=str(file_obj.id),
        )
        print('Created: '+row['NDOPROCESSO']+'.')

transaction.commit()

当脚本将设置文件时,出现错误 "WrongType"。详见下文。

Traceback (most recent call last):
  File "<console>", line 18, in <module>
  File "/home/jaf/plone4310/buildout-cache/eggs/plone.namedfile-3.0.9-py2.7.egg/plone/namedfile/file.py", line 384, in __init__
    self.filename = filename
  File "/home/jaf/plone4310/buildout-cache/eggs/zope.schema-4.2.2-py2.7.egg/zope/schema/fieldproperty.py", line 52, in __set__
    field.validate(value)
  File "/home/jaf/plone4310/buildout-cache/eggs/zope.schema-4.2.2-py2.7.egg/zope/schema/_bootstrapfields.py", line 182, in validate
    self._validate(value)
  File "/home/jaf/plone4310/buildout-cache/eggs/zope.schema-4.2.2-py2.7.egg/zope/schema/_bootstrapfields.py", line 309, in _validate
    super(MinMaxLen, self)._validate(value)
  File "/home/jaf/plone4310/buildout-cache/eggs/zope.schema-4.2.2-py2.7.egg/zope/schema/_bootstrapfields.py", line 209, in _validate
    raise WrongType(value, self._type, self.__name__)
WrongType: ('processo-al-1.pdf', <type 'unicode'>, 'filename')

感谢关注!

-- 朱利安诺·阿劳若

您需要将文件名作为 unicode 传递。

file_obj.file = NamedBlobFile(
    data=open(pdf_path, 'r').read(),
    contentType='application/pdf',
    filename=unicode(file_obj.id),  # needs to be unicode
)

plone.namedfile 文档中的更多信息 --> https://github.com/plone/plone.namedfile/blob/36014d67c3befacfe3a058f1d3d99a6a4352a31f/plone/namedfile/usage.rst