将odoo图像存储到文件系统中

时间:2018-04-10 06:52:32

标签: python odoo odoo-11

希望所有堆叠成员都没问题。我可以使用代码

获取Product image的二进制数据
p_ids=self.env.context.get('active_ids')
produtc_templates = self.env['product.template']
for p_id in p_ids:
 binaryData = produtc_templates.search([('id', '=',p_id)]).image 
 data=base64.b64decode(binaryData)
        file="marketplaces/rakuten_ftp/static/imageToSave_"+str(p_id)+".png"
        with open(file, "wb") as imgFile:
            imgFile.write(data)

上面的代码是从二进制数据创建文件但是我无法在mimetype base上应用条件。因为当我使用Products id查询ir_attachment表时它会返回False。

for p_id in p_ids:
 attachments = self.env['ir.attachment']
 mimetype=attachments.search([('res_id','=',p_id)])

我正在考虑res_id作为产品ID。但odoo未能找到任何针对该id的记录。所以如果有任何机构知道如何获取mimetype对我的产品ID那么请帮助我。

2 个答案:

答案 0 :(得分:3)

您的代码看起来不错!但是根据datas对象,二进制数据存储在product_image = self.env['ir.attachment'] product_images = product_image.search([('id', 'in', p_ids)]) for rec in product_images: with open("imageToSave.jpg", "wb") as imgFile: imgFile.write(base64.b64decode(rec.datas)) 字段中。因此,您可以使用该数据将二进制数据解码为图像文件!!

已在下面的代码中尝试过 Odoo v11 ...&它是从二进制数据创建的新图像文件,存储在mimetype字段中!

p_ids

您还可以添加mimetype的条件,因为image/jpeg可以包含多个ID,因此请仅使用image/png Odoo v11.0import base64 from odoo.tools.mimetypes import guess_mimetype p_ids = [16, 18, 11, 38, 39, 40] # Taking random ids of product.template produtc_templates = self.env['product.template'] for p_id in p_ids: binary_data = produtc_templates.search([('id', '=', p_id)]).image mimetype = guess_mimetype(base64.b64decode(binary_data)) file_path = "" if mimetype == 'image/png': file_path = "/home/Downloads/" + str(p_id) + ".png" elif mimetype == 'image/jpeg': file_path = "/home/Downloads/" + str(p_id) + ".jpeg" if file_path: with open(file_path, "wb") as imgFile: imgFile.write(base64.b64decode(binary_data)) 的ID }

编辑#1

下面的代码段已经使用$ sed -i 's/ he/ she/g' S13a4sed sed: illegal option -- i

进行了检查
   .slider {
    	z-index:1;
    	margin-top:200px;
    	position:relative; 
    }
    	
    .carousel-inner {
    	transform: skewy(-190deg);
    	height:500px;}
    	
    .carousel-inner img {
    	transform: skewy(13deg);
    	height: 1000px !important;
    	margin-top: -191px;}
    	
    .slider-2 {
    	position:absolute;
    	transform:rotate(-15deg);
    	z-index:-2;
    	width:970px;
    	top:115px;
    	height:650px !important;
    	background-color:#e2e2e2;
    	margin-left:30px;
    	transform: skewy(-190deg);}
    	
    .carousel-indicators {
      bottom:-90px;
      transform: rotate(-10deg );}
      
    .carousel-indicators li {
    	 border-color:#152b46;}
    	 
    .carousel-indicators .active {
    	background-color:#152b46;}
		

答案 1 :(得分:1)

产品图片不会保存为ir.attachment的实例/记录。好吧,也许这已经改变了,但我找不到任何快速的东西。

您可以做的是使用ir.attachment的方法_compute_mimetype()

以下示例未经过测试:

def get_mimetype_of_product_image(self, product_id)
    product = self.env['product.product'].browse(product_id)
    mimetype = self.env['ir.attachment']._compute_mimetype(
        {'values': product.image})
    return mimetype