2015-08-09 14 views
5

Odoo'da özel bir web formum var. Dosyaları yüklemem gerek. Benim controllers.py:Odoo web formundaki dosyaları yükle

@http.route(['/test/'], type='http', auth="user", methods=['GET', 'POST'], website=True) 
def upload_files(self, **post): 
    values = {} 
    form_vals = {} 

       ........... 

    if post.get('attachment',False): 
     Attachments = request.registry['ir.attachment'] 
     name = post.get('attachment').filename  
     file = post.get('attachment') 
     attachment_id = Attachments.create(request.cr, request.uid, { 
      'name':name, 
      'res_name': name, 
      'type': 'binary', 
      'res_model': 'project.issue', 
      'res_id': form_id, 
      'datas': base64.encode(file.read()), 
     }, request.context) 

      ............ 

Kod yukarıdaki vb adı res_model ile eki oluşturur, ancak ekli dosya iss hasarlı ve açılamaz.

XML dosyası: Konsolda

.......... 

<form t-attf-action="/test/done" method="post" enctype="multipart/form-data" class="form-horizontal mt32"><div t-attf-class="form-group"> 

    .......... 

    <div t-attf-class="form-group"> 
     <label class="col-md-3 col-sm-4 control-label" for="attachment">Attachments</label> 
     <div class="col-md-7 col-sm-8"> 
      <input name="attachment" type="file" class="file" multiple="true" data-show-upload="true" data-show-caption="true" lass="file" data-show-preview="true"/> 
     </div> 
    </div>> 

    .......... 
</form> 

bu:

name = post.get('attachments_for_issue').filename 
_logger.error("name is: %r", name) 
file = post.get('attachments_for_issue') 
_logger.error("file is?: %r", file.read()) 

döner:

5092 ERROR HDHDHD openerp.addons.test.controllers.controllers: name is: u'test_image.jpg' 
5092 ERROR HDHDHD openerp.addons.test.controllers.controllers: file is?: <FileStorage: u'test_image.jpg' ('image/jpeg')> 
+0

Dene: Bu işe yaramazsa uygulama/sekizli-stream" – dsgdfg

+0

"= enctype": = "çok parçalı/form-data" Kime enctype. Windows, günlük dosyasında ne tür bir hata olduğunu göstermez, ancak sayfa yüklenmeye devam eder ve hepsi budur. Bir dosya python'da açılmadığında – Misters

+0

. EOF veya başlık hatası (lar) var. yükleme için doğru içerik başlığı gerekir. Bir base64 nesnesine sahipsin, ama kaydetme prosedürün hakkında hiçbir fikrim yok. – dsgdfg

cevap

0

budur: bu yüzden, bu şekilde kullanmak ve
ardından
'verileri'
eki = file.read() kontrol etmek deneyin

:

sonra
file = post.get('attachment') 
attach = file.stream 
f = attach.getvalue() 

ve:

... 
'datas': base64.encodestring(f), 
... 

Bu ekinde dosya ekler

+0

Bu işe yaramıyor. "Post" isminde bir nesne yok. – user568021

1

i sorun base64.encode ile olduğunu düşünüyorum (file.read())

f rom python docs biz var
base64.encode (giriş, çıkış) input
Girdi dosyasının içeriğini kodlayın ve çıkan base64 kodlanmış verileri çıktı dosyasına yazın. giriş ve çıkış, dosya nesnesi arabirimini taklit eden dosya nesneleri veya nesneler olmalıdır. input.read() boş bir dize döndürene kadar giriş okunur. encode(), kodlanmış verileri ve sondaki yeni satır karakterini ('\ n') döndürür. nasıl çalıştığını attachment.encode ('base64')

+0

attachment = file.read() Hiçbir şey döndürmez, bu yüzden sorun var sanırım. – Misters