2015-04-06 19 views
1

我有一个原型内容,其字段名为文件,它是MultiFileField(来自archetypes.multifile.MultiFileField)。该模式是这样的:提取OFS图像的Pdata对象,并将其保存为敏捷的Namedfile

MultiFileField('file', 
     primary=True, 
     languageIndependent=True, 
     widget = MultiFileWidget(
     label= "File Uploads", 
     show_content_type = False,)) 

而且我有一个具有相同的字段名称是文件一个敏捷的内容类型,我想创建一个脚本,从原型的内容,并通过提取存储上传的对象它在敏捷定制内容类型上。对于敏捷定制内容类型的模式是:

form.widget(file=MultiFileFieldWidget) 
file = schema.List(
     title=_(u"File Attachment"), 
     required=False, 
     value_type=NamedFile(), 
    ) 

我观察到原型的MultiFileField存储上传的对象作为图像OFS 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) 

回答

0

首先,您可能希望使用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()] 

假设你有previous_obj和new_obj可用。

+0

感谢您的宝贵意见,但我想你的代码,当我编辑的内容类型,我得到这个错误,MimeTypeException:畸形MIME类型()。 – user1225163

+0

想尝试更新的答案提供的contentType和文件名NamedBlobFile? – vangheem

+0

谢谢,会尝试更新的代码。 – user1225163

相关问题