将 odoo 图像存储到文件系统中
Store odoo images into filesystem
希望所有堆栈成员都没事。我能够使用代码
获取产品图像的二进制数据
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)
上面的代码是从二进制数据创建文件但是当我查询 ir_attachment table 和产品 ID 时,我无法在 mimetype base.Because 上应用条件 return 我错误。
for p_id in p_ids:
attachments = self.env['ir.attachment']
mimetype=attachments.search([('res_id','=',p_id)])
我正在考虑将 res_id 作为产品 ID。但是 odoo 未能找到任何反对该记录的记录 id.So 如果有人知道我如何根据我的产品 ID 获取 mimetype 那么请帮助我.
你的代码看起来不错!但是根据 ir.attachement
对象,二进制数据存储在 datas
字段中。因此,您可以使用该数据将二进制数据解码为图像文件!!
已经尝试将下面的代码写入 Odoo v11... & 它的工作原理是从存储在 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))
您还可以为 mimetype
添加条件,因为 p_ids
可以包含多个 ID,因此只取 mimetype
或 image/jpeg
或 image/png
编辑 #1
下面的代码片段已经用 Odoo v11.0
检查过
import 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))
产品图片未保存为 ir.attachment
的 instances/records。好的,也许已经改变了,但我没有这么快找到任何东西。
你能做的,就是使用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
希望所有堆栈成员都没事。我能够使用代码
获取产品图像的二进制数据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)
上面的代码是从二进制数据创建文件但是当我查询 ir_attachment table 和产品 ID 时,我无法在 mimetype base.Because 上应用条件 return 我错误。
for p_id in p_ids:
attachments = self.env['ir.attachment']
mimetype=attachments.search([('res_id','=',p_id)])
我正在考虑将 res_id 作为产品 ID。但是 odoo 未能找到任何反对该记录的记录 id.So 如果有人知道我如何根据我的产品 ID 获取 mimetype 那么请帮助我.
你的代码看起来不错!但是根据 ir.attachement
对象,二进制数据存储在 datas
字段中。因此,您可以使用该数据将二进制数据解码为图像文件!!
已经尝试将下面的代码写入 Odoo v11... & 它的工作原理是从存储在 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))
您还可以为 mimetype
添加条件,因为 p_ids
可以包含多个 ID,因此只取 mimetype
或 image/jpeg
或 image/png
编辑 #1
下面的代码片段已经用 Odoo v11.0
import 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))
产品图片未保存为 ir.attachment
的 instances/records。好的,也许已经改变了,但我没有这么快找到任何东西。
你能做的,就是使用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