转载请注明原文地址:https://www.cnblogs.com/cnodoo/p/9307319.html 

一:odoo后端上传附件

odoo中的ir.attachment模型是附件模型,可以用一个字段关联到该模型,从而达到保存附件的功能。

例如:

advert_attachment = fields.Many2one('ir.attachment', string=u'广告视频')

之后,在form视图中编辑该字段时,就可以从attachment模型的记录中选取已上传的附件文件,或者新建一条attachment记录来上传附件。

二:其他系统的前端网页、Webapp、移动app下载或访问附件

ir.attachment模型对应的数据库表是:ir_attachment

查看该表的字段,我们发现其中最重要的字段主要以下几个:

id:记录id,唯一。

name:上传附件时,为该记录的命名。

datas_fname:上传附件的本来文件名,含后缀名。

datas:隐藏字段,数据库表中看不到该字段,但是代码中可以通过该字段取到附件在数据库中存储的二进制数据串。
复制代码

知道了附件的存储形式,那么访问的思路就有了:

通过id或者name属性,查询ir_attachment表,得到对应的记录对象;

访问记录对象的datas字段,获取附件的二进制数据

odoo是以base64的格式保存附件的,所以我们也通过base64解码附件的二进制数据

最后,我们通过IO流来传输数据回前端、webapp、移动端

#需要导入以下两个模块
from cStringIO import StringIO
import base64

#在controller中,把数据流以文件形式返回
data = StringIO(base64.standard_b64decode(记录.datas))  //用base64把二进制数据解码,作为参数创建StringIO流。
return http.send_file(data,filename=记录['datas_fname'],as_attachment=True) //用http.send_file把IO流返回客户端

三:非odoo系统的前端网页、webapp、移动app向odoo上传附件文件

使用文件上传插件把文件数据流传输到controller,并把一些必要字段值如name、datas_fname等传过来;

在controller的方法中,调用ir.attachment模型等write方法插入一条新记录即可。

Odoo附件传输的更多相关文章

  1. odoo开发笔记 -- 附件上传

    附件上传基本原理实现,可以参考这篇: https://www.cnblogs.com/ljwTiey/p/7348291.html http://blog.csdn.net/wangnan537/ar ...

  2. Web Service 附件技术的发展及演变

    Web Service 通常将业务数据封装在 SOAP 主体或者 SOAP 消息附件中进行传输,这些附件往往采用 Base64 编码二进制方式进行封装,这将大大增加待传输的数据量,消耗比较长的编码时间 ...

  3. gSOAP MTOM

    前言 需要准备的知识:wsdl,soap,gSOAP,C++,fidder. 首先介绍几个相关的概念 1.MTOM基础概念      MTOM(Message Transmission Optimiz ...

  4. JAVA6开发WebService (二)——JAX-WS例子

    转载自http://wuhongyu.iteye.com/blog/807836 上一篇写了个最简单的小例子,只是为了说明JAVA6开发Web Service很方便,这一篇稍微深入一点,写个稍微有点代 ...

  5. 你真的了解JAVA中与Webservice相关的规范和实现吗?

    非常多人在项目中使用Webservice,仅仅是知道怎样公布Webservice,怎样调用Webservice,但真要论其来龙去脉,还真不一定清楚. 一切一切还要从我们伟大的sun公司规范说起. JA ...

  6. 如何选择适合自己的CMS建站系统

             在互联网发展突飞猛进的今天,可谓”得市场者得天下”,而电商已成为占据市场速度最快.范围最广的手段,进而网站建设也逐渐引起商家重视,并深入到了企业和个体的发展战略之中. 如今企业建站已 ...

  7. 调用webService的几种方式

    转自:http://blog.csdn.net/u011165335/article/details/51345224 一.概览 方式1: HttpClient:可以用来调用webservie服务,也 ...

  8. WebService案例入门(基础篇)

    [版权申明:本文系作者原创,转载请注明出处] 文章出处:http://blog.csdn.net/sdksdk0/article/details/52106690 作者:朱培 ID:sdksdk0 邮 ...

  9. webService的介绍与简单使用

    webService开发项目介绍: 1 Webservice:跨语言跨平台的远程调用技术.Web service 即web服务,它是一种跨编程语言和跨操作系统平台的远程调用技术即跨平台远程调用技术. ...

随机推荐

  1. Win10 注册IIs4.0的解决方案

    随着Win10的出现,越来越多的人装上了Win10,尤其是程序员,由于Win10是一个新的操作系统,但现有软件的兼容性等各方面都是未知,难免会存在很多坑,就拿IIS来说,我刚装完win10系统,然后装 ...

  2. java设计模式-----21、备忘录模式

    概念: Memento模式也叫备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是GoF的23种设计模式之一,属于行为模式,它的作用是保存对象的内部状态,并在需要的时候(u ...

  3. [转载] MySQL的四种事务隔离级别

    本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一.事务的基本要素(ACID) 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做 ...

  4. linux系统编程:用truncate调整文件大小

    truncate的使用非常简单: int truncate(const char *path, off_t length); 参数1:文件名 参数2:  文件需要被调整的大小 length 大于 文件 ...

  5. 'QuerySet' object has no attribute '_meta'

    'QuerySet' object has no attribute '_meta' 对象列表没有'_meta'属性 单独的对象才有, 忘记加first了 edit_obj = models.Role ...

  6. C++ 的那些坑 (Day 2)

    虚函数调用的例外 我们知道在通过基类的指针或者引用调用某个对象的函数时,如果这个对象是一个派生类而且该方法是一个虚方法那么一般情况下就会调用派生类的虚方法实现.这个过程是C++的多态.然而这之中有些例 ...

  7. JConsole连接远程linux服务器配置

    1.在远程机的tomcat的catalina.sh中加入配置 (catalina.sh路径在tomcat/bin下面 如/usr/local/tomcat/bin) if [ "$1&quo ...

  8. Nginx的性能优化

    1.优化worker进程个数: 在高并发.高访问量的WEB服务场景,需要事先启动更多的nginx进程,以保证快速响应并处理大量并发用户的请求,优化nginx进程个数的配置项就是,在nginx.conf ...

  9. AIDL安卓接口定义语言

    Android    Interface Definition  Language简称AIDL翻译为 :安卓       接口      定义        语言 AIDL:进程间通信.Android ...

  10. 常用的第三方模块 psutil url

    psutil 用Python来编写脚本简化日常的运维工作是Python的一个重要用途.在Linux下,有许多系统命令可以让我们时刻监控系统运行的状态,如ps,top,free等等.要获取这些系统信息, ...