在OpenERP中将二进制文件返回到客户端的一种常用方法是使用fields.binary
列.您可以将其放在一个仅在会话期间存在的TransientModel
对象(以前osv_memory
用于创建交互式向导)中.二进制字段值可以作为先前操作的结果来设置,或者可以通过使fields.function
列模拟它来在运行中计算.
您可以在官方插件中找到几个这样的示例,例如生成CVS/PO/TGZ文件的转换导出向导.由于历史RPC传输的原因,一个缺陷是二进制值必须是base64编码的.
从OpenERP 6.1开始,还可以从服务器文件系统直接下载文件.它就像将文件的URL放在一个fields.char
值中一样简单,作为一个以模块为根的相对URL,例如/module/path/to/file
.然后使用在表单视图中将此字段添加为链接widget="url"
.使用它的一种情况是邮件客户端插件的配置向导.
这适用于作为模块一部分的静态文件,但不适用于由于用户操作而由系统生成的文件,因为它们可能不会存储在模块的文件系统上,甚至是暂时存储的.在正确安全的安装中,OpenERP服务器进程甚至可能无权写入模块源所在的文件系统.
还有其他选项,例如编写自己的Web控制器,但上述解决方案应该适用于大多数情况.