Python 提取S Image Pdata对象并将其另存为灵巧上的Namedfile

Python 提取S Image Pdata对象并将其另存为灵巧上的Namedfile,python,plone,dexterity,archetypes,Python,Plone,Dexterity,Archetypes,我有一个原型内容,它有一个名为file的字段,它是MultiFileField(来自archetypes.multifiles.MultiFileField)。模式类似于: MultiFileField('file', primary=True, languageIndependent=True, widget = MultiFileWidget( label= "File Uploads", show_content_t

我有一个原型内容,它有一个名为file的字段,它是MultiFileField(来自archetypes.multifiles.MultiFileField)。模式类似于:

MultiFileField('file',
       primary=True,
       languageIndependent=True,
       widget = MultiFileWidget(
        label= "File Uploads",
        show_content_type = False,))
我有一个灵巧性内容类型,它具有相同的字段名,即file,我想创建一个脚本,从原型内容中提取存储的上传对象,并将其传递给灵巧性自定义内容类型。灵巧度自定义内容类型的架构为:

form.widget(file=MultiFileFieldWidget)
file = schema.List(
        title=_(u"File Attachment"),
        required=False,
        value_type=NamedFile(),
    )
我观察到Archetype的多文件字段将上传的对象存储为OFS Image Pdata,对于后一部分,它存储为plone.namedfile.file.namedfile对象。有没有办法将OFS对象转换为Namedfile对象

更新: 我已经找到了解决办法,但我不确定这是否正确

for field in prev_obj.Schema().fields():
    key = field.getName()
    objects_list = []
    value = field.getRaw(prev_obj)
    for f in value:
        data = str(f['file'].data)
        filename = unicode(f['filename'])
        contentType = f['content_type']
        fileData = NamedFile(data=data, contentType=contentType, filename=filename)
        objects_list.append(fileData)
    new_obj.file = copy.copy(objects_list)

首先,您可能希望改用NamedBlobFile

那么,您是否尝试过这样的方法来转换数据

from plone.namedfile.file import NamedBlobFile
new_obj.file = [NamedBlobFile(str(fdata), contentType=fdata.content_type, filename=fdata.filename) for fdata in previous_obj.getFile()]

假设您有以前的\u obj和新的\u obj可用。

谢谢您的建议,但我尝试了您的代码,当我编辑内容类型时,出现此错误,MimeTypeException:格式不正确的MIME类型()。要尝试更新的答案,该答案为NamedBlobFile提供了contentType和文件名吗?