我如何在上传文件时创建文件的校验和(MD5,sha512,无论什么),这样当我下载时(使用cache_stored_file!
),我可以验证它确实是上传的原始文件?如何创建carrierwave上传的校验和来验证下载?
0
A
回答
0
Ruby摘要模块可以帮助解决这个问题。
单向解决方案是读取上传文件,并为其分配一个带有before_create
回调的唯一摘要。我会将它作为列添加到数据库中的文件表上。
下面是一些输出IRB显示它是如何工作的:
2.2.2 :001 > require 'digest'
=> true
2.2.2 :002 > f = File.read 'test.rb'
=> "Original content\n"
2.2.2 :003 > Digest::SHA256.hexdigest(f)
=> "646722e7ee99e28d618142b9d3a1bfcbe2196d8332ae632cc867ae5d1c8c57b5"
# (... file modified ...)
2.2.2 :004 > f = File.read 'test.rb'
=> "Original content with more content\n"
2.2.2 :005 > Digest::SHA256.hexdigest(f)
=> "c29f2f77c0777a78dbdf119bf0a58b470c098635dfc8279542e4c49d6f20e62c"
您可以使用此消化你的下载方法来检查文件的完整性。如果您再次读取文件,生成一个摘要,并且它与原始摘要相匹配,则可以确信该文件自上传以来未被更改过。
0
MD5 =文摘:: MD5.file( '文件路径')。hexdigest
这将读入的块文件,并避免读取在RAM中的整个文件,其在完成的File.read()
对于SHA校验
Digest::SHA2.hexdigest(File.read("/path/to/my/file.txt"));
个OR
Digest::SHA2.file(myFile).hexdigest => "fa5880ac744f3c05c649a864739530ac387c8c8b0231a7d008c27f0f6a2753c7"
更多细节的SHA校验和生成SHA Checksum
相关问题
- 1. 验证Carrierwave上传的大小
- 2. 使用Carrierwave验证上传的大小
- 3. Rails4:如何验证carrierwave上传的图片大小?
- 4. 上传文件时计算校验和
- 5. Matlab为变量创建MD5校验和
- 6. 创建NLog文件校验和
- 7. ICMP校验和卸载
- 8. 消息上的校验和
- 9. Carrierwave文件的Mongoid验证
- 10. 这段代码如何验证校验和?
- 11. 如何创建媒体文件的稳定校验和?
- 12. Carrierwave翻译上验证文件大小
- 13. 使用内部验证来验证动态创建的视图
- 14. Jquery校验和
- 15. 如何为AWS S3多部分上传生成md5校验和?
- 16. 如何从DataTable对象创建校验和?
- 17. Logstash - 如何在字段内动态创建校验和
- 18. GCS - DataCorruption:校验错配,同时下载
- 19. 如何生成和验证节点JS中给定字符串的校验和
- 20. JavaScript卡PAN校验码Luhn验证
- 21. 验证下载的图像
- 22. 如何创建此ASP.NET的验证器
- 23. 如何在iPhone上创建和维护身份验证会话?
- 24. 如何验证下载链接
- 25. 如何设置下载验证?
- 26. 如何验证HTTP文件下载?
- 27. 在c中验证模块化总和校验和#
- 28. 如何在delphi 2010中创建验证码验证?
- 29. 验证和传承
- 30. 构建long值数组的校验和
的可能的复制http://stackoverflow.com/questions/34490/how-do-i-create-a-sha1-hash-红宝石? –
@JakeWorth不,这是它的一部分,但我特别希望让carrierwave获得文件的哈希值,存储它,然后在用来对文件执行后期处理时使用它来验证下载。 – jrg