我正在使用rails 3.2.13,我需要手动上传文件(不使用回形针),然后将其转换为64。
我遇到的问题是我认为我的文件没有完整上传。
我正在尝试上传jpg。
以下是代码:表单
= form_tag send_kyc_docs_bookings_path , :multipart => true do
= file_field_tag :kyc_doc
= submit_tag "Submit"
我的控制器
@encoded_file = Base64.encode64(File.open(params[:kyc_doc].tempfile,"r").read)
我得到的是 “/ 9J / 4AAQSkZJRgABAQEAtAC0AAD / 4R5kRXhpZgAASUkqAAgAAAAQAA8BAgAG \ nAAAAzgAAABABAgAVAAAA1AAAABIBAwABAAAAAQAAAA == \ n” 个
现在,如果我继续http://www.base64-image.de/step-2.php
我上传了我的文件并获得了一个像我上面开始的字符串,但却长了1000倍。
所以我发现我的文件没有完整上传,这是我的问题: 我如何完整地上传它?
如果我做的话,只是为了你的责任
File.open(params[:kyc_doc].tempfile,"r").read
我得到了
“\ XFF \ XD8 \ XFF \ xE0 \ u0000的\ u0010JFIF \ u0000的\ U0001 \ U0001 \ U0001 \ u0000的\ XB4 \ u0000的\ XB4 \ u0000的\ u0000的\ XFF \ XE1 \ u001EdExif \ u0000的\ u0000II * \ u0000的\ b \ u0000的\ u0000的\ u0000的\ u0010 \ u0000的\ u000F \ U0001 \ U0002 \ u0000的\ u0006 \ u0000的\ u0000的\ u0000的\ XCE \ u0000的\ u0000的\ u0000的\ u0010 \ U0001 \ U0002 \ u0000的\ u0015 \ u0000的\ u0000的\ u0000的\ XD4 \ u0000的\ u0000的\ u0000的\ u0012 \ U0001 \ U0003 \ u0000的\ U0001 \ u0000的\ u0000的\ u0000的\ U0001 \ u0000的\ u0000的\ u0000" 的
现在,如果我做
params[:kyc_doc].tempfile.read
我明白了
“\ XFF \ XD8 \ XFF \ xE0 \ X00 \ x10JFIF \ X00 \ X01 \ X01 \ X01 \ X00 \ XB4 \ X00 \ XB4 \ X00 \ X00 \ XFF \ XE1 \ x1EdExif \ X00 \ x00II * \ X00 \ B \ X00 \ X00 \ X00 \ X10 \ X00 \ X0F \ X01 \ X02 \ X00 \ X06 \ X00 \ X00 \ X00 \ XCE \ X00 \ X00 \ X00 \ X10 \ X01 \ X02 \ X00 \ X15 \ X00 \ X00 \ X00 \ XD4 \ X00 \ X00 \ X00 \ X12 \ X01 \ X03 \ X00 \ X01 \ X00 \ X00 \ X00 \ X01 \ X00 \ X00 \ X00 \ X1A \ X01 \ X05 \ X00 \ X01 \ X00 \ X00 \ X00 \ XEA \ X00 \ X00 \ X00。\ E \ X01 \ X05 \ X00 \ X01 \ X00 \ X00 \ X00 \ XF2 \ X00 \ X00 \ X00(\ X01 \ X03 \ X00 \ X01 \ X00 \ X00 \ X00 \ X02 \ X00 \ X00 \ X002 \ X01 \ X02 \ X00 \ X14 \ X00 \ X00 \ X00 \ XFA \ X00 \ X00 \ X00 \ X13 \ X02 \ X03 \ X00 \ X01 \ X00 \ X00 \ X00 \ X01 \ X00 \ X00 \ X00 \ X01 \ X10 \ X03 \ X00 \ X01 \ X00 \ X00 \ X00 \ X00 \ b \ X00 \ X00 \ X02 \ X10 \ X03 \ X00 \ X01 \ X00 \ X00 \ X00 \ X00 \ X06 \ X00 \ x00i \的x87 \ X04 \ X00 \ X01 \ X00 \ X00 \ X00 \ X16 \ X01 \ X00 \ X00 \ X01 \ XA4 \ X03 \ X00 \ X01 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X02 \ XA4 \ X03 \ X00 \ X01 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X03 \ XA4 \ X03 \ X00 \ X01 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X04 \ XA4 \ X05 \ X00 \ X01 \ x00 \ x00 \ x00 \ x0E \ x01 \ x00 \ x00 \ x06 \ xA4 \ x03 \ x00 \ x01 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ xBC \ x03 \ x00 \ x00Canon \ x00Canon PowerShot A610 \ X00 \ X00 \ XB4 \ X00 \ X00 \ X00 \ X01 \ X00 \ X00 \ X00 \ XB4 \ X00 \ X00 \ X00 \ X01 \ X00 \ X00 \ x002009: 03:18 16:30:39 \ x00 \ n \ x00 \ x00 ....(1000倍以上)
然而
Base64.encode64(params[:kyc_doc].tempfile.read)
返回一个空字符串
更新:
File.open(params[:kyc_doc].tempfile,"r").size
=> 241202
>> File.open(params[:kyc_doc].tempfile,"r").read.size
=> 76
有没有人对这个问题有所了解?
由于
的 ANSWER 的
好的,所以我想出来了,事实上当你做的时候
File.open(params[:kyc_doc].tempfile,"r")
它只能看到文件的第一个caracteres(可能是因为缓冲区大小?) 所以你需要通过
遍历文档中包含的所有caracteres集File.open(params[:kyc_doc].tempfile, "rb") {|io| io.read}
这将输出所有文档内容
现在你可以正确编码了
@encoded_file = Base64.encode64(File.open(params [:kyc_doc] .tempfile,“rb”){| io | io.read})
如果有人能更好地解释,我会很高兴听到它^^