首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >odoo 13通过Python的minio api上传视频文件

odoo 13通过Python的minio api上传视频文件
EN

Stack Overflow用户
提问于 2020-08-13 11:32:32
回答 1查看 329关注 0票数 0

我正在尝试开发一个通过Python的MinIO接口上传视频文件的模块。

该文件可以上传到MinIO,但不能通过http://localhost:9000/lms-videos/video/output.mp4这样的url查看。还有通过MinIO上传的文件应该是19.39Mb,而通过API上传的是25+MB,不知道是什么原因.....

以下是我的部分代码:

代码语言:javascript
复制
# minio client
@api.model
def _get_minio_client(self):
    host = '192.168.1.102:9000'
    access_key = 'minioadmin'
    secret_key = 'minioadmin'
    if not all((host, access_key, secret_key)):
        raise exceptions.UserError('Incorrect configuration of MinIO')
    return Minio(
    host,
    access_key = access_key,
    secret_key = secret_key,
    secure = False
    )
# upload
@api.model
def _store_file_write(self):
    client = self._get_minio_client()
    bin_data = self.datas_minio
    fname = "output_test"
    #client.put_object('lms-videos','videos/'+ fname + '.mp4',io.BytesIO(self.datas_minio), len(bin_data),'video/mp4')
    with io.BytesIO(self.datas_minio) as bin_data_io:
        client.put_object('lms-videos',
                          'videos/'+ fname + '.mp4',
                          bin_data_io,
                          len(bin_data),
                          'video/mp4')

@api.depends('document_id', 'slide_type', 'mime_type', 'external_url')
def _compute_embed_code(self):
    res = super(Slide, self)._compute_embed_code()
    for record in self:
        if record.slide_type == 'miniovideo':
            
            self._store_file_write()
            
            content_url = 'http://localhost:9000/lms-videos/videos/' + record.name + '.mp4'
            record.embed_code = '<video class="miniovideo" controls controlsList="nodownload"><source src="' + content_url + '" type=MPEG-4/></video>'
        
@api.onchange('datas_minio')
def _on_change_datas(self):
    res = super(Slide, self)._on_change_datas()
    if self.datas_minio:
        #fname = self.datas_minio.decode("utf-8")
        #bin_data = self.datas_minio
        self._store_file_write()
        #self._get_minio_client().put_object('lms-videos', '/videos/'+ fname + '.mp4',io.BytesIO(bin_data), len(bin_data),'video/mp4')
    return res
EN

回答 1

Stack Overflow用户

发布于 2020-08-13 12:56:05

已通过添加b64decode修复此问题

代码语言:javascript
复制
@api.model
    def _store_file_write(self):
        client = self._get_minio_client()
        bin_data = base64.b64decode(self.datas_minio)
        fsize = len(bin_data)
        fname = "output_test"
       
        with io.BytesIO(bin_data) as bin_data_io:
            client.put_object('lms-videos',
                              #'videos/'+ fname + '.mp4',
                              'videos/output_test.mp4',
                              bin_data_io,
                              fsize,
                              'video/mp4')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63387745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档