应答2-发送文件和其它数据(send_data)

我们已经看了在“控制器”内提交模板(render)和发送字符串(render_to_string)。应答的第三个部分是发送数据(典型地,但不是必须的,是文件的内容)给客户端。

A、send_data 发送包含二进制数据的字符串给客户端。
send_data(data, options...)
发送一个数据流给客户端。典型地浏览器将结合使用内容类型与部署,两者在选项内设
置,来决定这个用数据做什么。
def sales_graph
png_data = Sales.plot_for(Date.today.month)
send_data(png_data, :type => "image/png", :disposition =>
"inline")
end
选项:
1、:filename 字符串, 在保存数据时,建议浏览器使用缺省的文件名。
2、:type 字符串, 内容类型,缺省为application/octet-stream。
3、:disposition 字符串, 建议浏览器应该使用内联的(选项inline)或者是下载的文
件并保存(缺省选项attachment)。

B、send_file 发送文件的内容给客户端。
send_file(path, options...)
发送指定文件给客户端。方法设置Content-Length,Content-Type,Content-
Disposition,和Content-Transfer-Encodeing 头。
选项:
1、:filename 字符串, 当保存文件时,建议浏览器使用缺省文件名。如果没有设置,
缺省是文件名路径。
2、:type 字符串, 内容类型,缺省应用application/octet-stream。
3、:disposition 字符串,建议浏览器应该使用内联的(选项inline)或者是下载的文件
并保存(缺省选项attachment)。
4、:streaming true 或false ,如果是false, 则整个文件被读入服务器内存并发送
给客户端。否则,文件以:buffer_size 块来读并写给客户端。
You can set additional headers for either send_ method using the headers
attribute in the controller.
def send_secret_file
send_file("/files/secret_list")
headers["Content-Description"] = "Top secret"
end
封装这些代码可以使用一个函数来实现,如下所示: ```javascript function initializeVariables() { const header = 0xAA; //链路层协议报文头标识 var ntr = 20; //必须应答的最大报文个数 最大39 var send_ntr = 0; //已经发送的 ntr数 var rto = 200; //应答超时时间 var mcp = 20; //可连续发生的ntr个数 最大20 var receiver_ntr_count = 0; //连续收到的报文个数 var receiverBlueEmsData = [] //接收到的蓝牙报文队列 var receiverEmsData = [] //接收到的报文队列 var receiverCurrentPackLenght = 0; //已接收报文的长度 var receiver_cmd = 0; //接收到的命令号 var send_array = []; //待发送数据报文 var rto_send_package = 0; //rto 定时发送数量 var linkTimer; const app = getApp(); const defaultByteLength = 16; const packeByteLength = 20; var todo_send_blue_data = [] //数据发送队列 var _applicationWatch; //应用层监听器 var lastSendData = [] //上次发送数据的缓存 var lastSendResult = true; //上次是否发送成功 // 返回封装后的变量对象 return { header, ntr, send_ntr, rto, mcp, receiver_ntr_count, receiverBlueEmsData, receiverEmsData, receiverCurrentPackLenght, receiver_cmd, send_array, rto_send_package, linkTimer, app, defaultByteLength, packeByteLength, todo_send_blue_data, _applicationWatch, lastSendData, lastSendResult }; } // 调用函数初始化变量 var variables = initializeVariables(); ``` 通过调用`initializeVariables()`函数,可以将变量封装在一个对象中,以便在其他地方使用。这样可以保持代码的整洁性可读性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值