亲爱的,
我正在创建一个脚本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()

当脚本设置文件时,出现错误“错误类型”。见冗长的下文。
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

关于python - 使用plone.api创建文件的脚本Python在设置文件时出现错误WrongType,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38351633/

10-11 23:22
查看更多