Skip to Content
Menu
Dette spørgsmål er blevet anmeldt
3 Besvarelser
6088 Visninger

Hello,

I am struggling to add an attachment to a mail message that I create through the XMLRPC API for Odoo 14.

I get the error message...  argument should be a bytes-like object or ASCII string, not \'Binary\'

But when I print the type of my argument, it says class 'bytes'

What am I missing ?

Code follows...

with open("c:/users/lwolf/pictures/WinUpdate1.png", "rb") as image_file:
  imageBase64 = base64.b64encode(image_file.read())

print("The type of imageBase64 is ", type(imageBase64))

models.execute_kw(db, uid, password,
    'ir.attachment',
    'create',
             [{
                'res_model' : 'mail.message',
                'name' : 'WinUpdate Image',
                'res_id' : id,
                'type' : 'binary',
                'mimetype' : 'image/png',
                'store_fname' : 'WinUpdate1.png',
                'datas' : imageBase64
                }]
            )


Avatar
Kassér

Hello Leonard, i am facing similar problem. have you found a fix?

Forfatter

Hello Bogdan,
Sorry to say, I have not been able to resolve this. I've given up for now until someone can give me advice.

Bedste svar
Please check this may be help
with open("c:/users/lwolf/pictures/WinUpdate1.png", "rb") as image_file:
  data = base64.b64encode(image_file.read())
imageBase64 = Image.open(io.BytesIO(data))

models.execute_kw(db, uid, password,
    'ir.attachment',
    'create',
             [{
                'res_model' : 'mail.message',
                'name' : 'WinUpdate Image',
                'res_id' : id,
                'type' : 'binary',
                'mimetype' : 'image/png',
                'store_fname' : 'WinUpdate1.png',                                
                'datas': base64.b64encode(imageBase64)
                }]           
)
Avatar
Kassér

How do you get the id field in 'res_id' : id ?
Thanks

Bedste svar

Hello all, 

The datas you send through the 'datas' key must be a "stringify" of your binary.

Instead of sending  

b"R0lGODdhAQABAIAAAP///////ywAAAAAAQABAAACAkQBADs="
You should sending :
R0lGODdhAQABAIAAAP///////ywAAAAAAQABAAACAkQBADs=

You can obtain it by using : imageBase64.decode()

Hope this will help you.

Avatar
Kassér
Bedste svar

convert to string

str(imageBase64)[2:]


Avatar
Kassér
Related Posts Besvarelser Visninger Aktivitet
2
jun. 25
277
1
sep. 23
1991
1
aug. 23
12668
3
jan. 23
7039
1
mar. 22
5085