auの携帯電話から3g2をダウンロードしようとすると分割ダウンロードの要求が送られて、au用マルチメディア・コンテンツダウンロードタグにしても「ダウンロードデータが正しくありません」となってしまうという現象が発生していました。
これはその現象にRailsで対処するためのコードです。あくまでも参考のためのサンプルで動作の保障はできません。
def send_3g2_file
path = RAILS_ROOT + '/public/' + params[:filename]
filesize = File::size(path)
range = request.env["HTTP_RANGE"]
if range and /^bytes=(\d+)\-(\d+)$/ =~ range
offset = $1.to_i
limit = $2.to_i
length = limit - offset + 1
response.headers["Content-Range"] = sprintf("bytes %d-%d/%d", offset, limit, filesize)
response.headers["Content-Disposition"] = "devmpzz"
content = IO::read(path, length, offset)
status = 206
else
content = IO::read(path)
status = 200
end
response.headers["Accept-Ranges"] = "bytes"
response.headers["Content-Length"] = length
Content-Typeの後に「; charset=utf-8」とか付かないようにするため
response.headers["Content-Transfer-Encoding"] = "binary"
render :text => content, :status => status, :content_type => "video/3gpp2", :layout => false
end