如何从ftp获取文件并存储在odoo数据库中?

问题描述 投票:0回答:1

我想从ftp服务器下载文件,并存储在二进制字段中,怎么做呢?其实,我想创建模型,并添加二进制字段来存储下载文件和读取这个文件。

class tog_sale(models.Model):
    _name = 'tog_sale.tog_sale'
    logging.info("zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz")
    datas=fields.Many2many('ir.attachment')
    name=fields.Char(string="name")

    @api.model
    def schedule_download(self):
        attachment_obj = self.env['ir.attachment']
        with request.urlopen('ftp://localhost/Downloads/iris.csv') as response:
            attachment_obj.create({'name': 'iris.csv', 'datas': response.read()})
python-3.x ftp odoo-13
1个回答
1
投票

你可以用 urllib.request.urlopen 从FTP服务器上获取文件,然后使用读取方法获取 bytes 将被用作二进制字段的值。

下面的例子将下载的文件存储在 datas 二进制领域 ir.attachment 表。

attachment_obj = self.env['ir.attachment']
with request.urlopen('ftp://ftp.dlink.eu/Manuals/DES-1008PA_Manual.pdf') as response:
    attachment_obj.create({'name': 'DES-1008PA_Manual.pdf', 'datas': response.read()})

编辑:

二进制 字段有一个属性 attachment 来指定该字段是否应存储为 ir_attachment 或模型表中的一列(default: True)

正如我所看到的,你添加了一个many2many字段来链接记录到 tog_sale.

例子:

你可以添加一行来创建一个附件,并填入 datas 领域:

with request.urlopen('ftp://ftp.dlink.eu/Manuals/DES-1008PA_Manual.pdf') as response:
    self.write({'datas': [(0, 0, {'name': 'DES-1008PA_Manual.pdf', 'datas': response.read()})]})
© www.soinside.com 2019 - 2024. All rights reserved.