转载请注明原文地址: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. [日常] Go语言圣经--包和文件-包初始化习题

    1.解决包级变量的依赖顺序,然后按照包级变量声明出现的顺序依次初始化 2.包中含有多个.go源文件,它们将按照发给编译器的顺序进行初始化 3.init初始化函数,在每个文件中的init初始化函数,在程 ...

  2. POJ2195&&HDU1533(KB11-D 最小费用最大流)

    Going Home Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 23515   Accepted: 11853 Desc ...

  3. python-策略模式

    源码地址:https://github.com/weilanhanf/PythonDesignPatterns 说明: 策略指的就是为了达到某一目的而采取的手段或者方法.为了实现软件设计咪表,对象可能 ...

  4. JavaScript 数组复制的方法

    1.循环 2.Array.from(arr) 3.let arr2 = [...arr]

  5. 从零开始学习html(十)CSS格式化排版——上

    一.文字排版--字体 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type&qu ...

  6. 语义SLAM的数据关联和语义定位(二)Semantic Localization Via the Matrix Permanent

    论文假设和单目标模型 这部分想讲一下Semantic Localization Via the Matrix Permanent这篇文章的一些假设. 待求解的问题可以描述为 假设从姿态\(x\)看到的 ...

  7. angularjs1.X获取前一天日期

    $scope.getDate = new Date(); //可以当前日期 $scope.nowDate = $filter("date")($scope.getDate, &qu ...

  8. Maven的下载与安装(Windows版本)

    前言: 安装Maven 3,需要安装jdk1.7及以上版本 具体步骤如下: 1.进入官网:http://maven.apache.org/download.cgi,如下图红框部分 其中: apache ...

  9. Pycharm代码补齐功能中的图标的意思

    分清楚图标的意思就能更好的使用对应的方法.类,避免错误使用括号 PS:博主老是给属性方法加上括号   代表方法: 红色的m.f,   代表类变量: 黄色的f     之前遇到个属性方法: 好像是p,无 ...

  10. Oracle EBS OPM 取消生产批

    --取消生产批 --created by jenrry SET serveroutput on; DECLARE p_batch_header_rec gme_batch_header%ROWTYPE ...