G'day люди,
Я повторно внедряю существующую службу загрузки пользовательских файлов в ruby (sinatra) с помощью redis в качестве резервного хранилища.
Клиент
вычисляет хеш SHA1 и инициирует загрузку
загружает до 64K фрагментов до конца
Сервер
добавляет куски в файл
вычисляет SHA1-хэш полного файла для проверки правильности получения
Теперь то, что я надеюсь сделать, это использовать оператор ruby (1.9.3) Digest :: SHA1 << (update) для каждого чанка (вместо того, чтобы читать файл ENTIRE с нуля в конце). Большие файлы> 1 ГБ.
К сожалению, 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) и сохранить / восстановить подобный объект?
- Получить альтернативную реализацию, которая позволила бы подобный вариант использования?
Спасибо
параметр
Обновление: Суть: 2280705 Реализация варианта 1 с использованием ruby FFI - надеюсь, что это будет полезно для кого-то еще