2015-04-06 47 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

相關問題