大家好,
我正在 ruby (sinatra) 中重新实现现有的自定义文件上传服务,并使用 redis 作为后备存储。
客户
计算 SHA1 哈希并启动上传
上传最多 64K 块直至完成
服务器
将块附加到文件
计算完整文件的 SHA1 哈希值以验证接收是否正确
现在,我希望做的是在每个块上使用 ruby (1.9.3) Digest::SHA1 1GB]。
不幸的是 Digest::SHA1 和 Marshal.dump 不兼容
1.9.3p125 :001 > require 'digest'
=> true
1.9.3p125 :002 > $digest = Digest::SHA1.new
=> #<Digest::SHA1: da39a3ee5e6b4b0d3255bfef95601890afd80709>
1.9.3p125 :003 > marshalled_digest = Marshal.dump($digest)
TypeError: no _dump_data is defined for class Digest::SHA1
from (irb):3:in `dump'
from (irb):3
from /Users/rhodry/.rvm/rubies/ruby-1.9.3-p125/bin/irb:16:in `<main>'
1.9.3p125 :004 >
有谁对如何:
- 访问底层内存(用 C 操作)并存储/恢复这样的对象?
- 获得允许类似用例的替代实现?
Thanks,
帕拉梅梅
Update: 要点:2280705使用 ruby FFI 实现选项 1 - 希望对其他人有用
您是否考虑过并且能够发送 64k 块的 SHA1?会有更多的校验和数据,但您会知道哪里出了问题,并且不需要存储摘要的内部状态。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)