转载请注明原文地址: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. 基于Spring Security2与 Ext 的权限管理设计与兑现

    基于Spring Security2与 Ext 的权限管理设计与实现 一.Spring Security介绍 Spring Security的前身Acegi,其配置及使用相对来说复杂一些,因为要配置的 ...

  2. java多线程——线程池源码分析(一)

    本文首发于cdream的个人博客,点击获得更好的阅读体验! 欢迎转载,转载请注明出处. 通常应用多线程技术时,我们并不会直接创建一个线程,因为系统启动一个新线程的成本是比较高的,涉及与操作系统的交互, ...

  3. Java - "JUC" ReentrantLock获取锁

    [Java并发编程实战]-----“J.U.C”:ReentrantLock之一简介 ReentrantLock介绍 ReentrantLock是一个可重入的互斥锁,又被称为“独占锁”. 顾名思义,R ...

  4. Codeforces729D(SummerTrainingDay01-F)

    D. Sea Battle time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  5. 深入理解CSS3 gradient斜向线性渐变——张鑫旭

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=3639 一.问题没有想 ...

  6. 简单三招,设计复杂ERP报表

    报表无疑是ERP系统中用到的最频繁的单据之一.比如每天采购要打印采购明细帐:仓库每天要导出收货或者出货明细:销售每天要打印订单明细等.故报表的设计在ERP系统开发中占据大半江山. 不过笔者在实际工作中 ...

  7. Python笔记(八):web开发

    #本文是在Windows环境下,Unix系统应该还要设置2个东西 (一)    采用MVC设计web应用 遵循   模型-视图-控制器(model-view-controlle) 模型:存储web应用 ...

  8. .NET(C#)如何遍历Dictionary

    我们知道.NET中的Dictionary是键/值对的集合,使用起来也是比较方便,Dictionary也可以用KeyValuePair来迭代遍历,具体如下: using System; using Sy ...

  9. Problem1-Project Euler

    Problem1-Project Euler Multiples of 3 and 5   If we list all the natural numbers below 10 that are m ...

  10. C#中获取数组中相加和最接近或等于(<=)给定值的算法

    , ,,,,,,,,, }; List<List<int>> mylist = new List<List<int>>(); int length = ...