使用rails中的Taglib-ruby,音频文件始终为null

时间:2014-07-31 07:40:30

标签: ruby-on-rails ruby file-upload taglib taglib-ruby

我正在尝试在Rails中构建一个应用程序,它将上传音频文件并从中读取元数据以填充数据库。我正在使用Taglib-ruby gem来处理各种文件类型。上传似乎是在自己的工作,但Taglib认为任何给它的文件为null。

这是我的控制器:

class UploadsController < ApplicationController
    require 'taglib'

    def new
    end

    def create
        file = params[:upload]
        TagLib::FileRef.open(file) do |fileref|
            unless fileref.null?
                tag = fileref.tag
                # properties = fileref.audio_properties
                @song = Song.new(title: tag.title, artist: tag.artist, album: tag.album,
                    year: tag.year, track: tag.track, genre: tag.genre)
                if @song.save
                    redirect_to songs_path
                else
                    render 'new'
                end
            else
                raise "file was null"
            end
        end
    end
end

以及我对表单提交的看法:

<h1> Upload </h1>

<%= form_tag(url: { action: :create }, html: { multipart: true }) do %>

    <%= label_tag :upload, "Scan your song:" %>
    <%= file_field_tag :upload, multiple: true %>

    <br />
    <%= submit_tag "Submit" %>

<% end %>

Taglib本身似乎正在工作 - 添加“require'taglib'”删除了我所得到的错误,并且我在rails之外制作的模型工作正常(所以文件我是使用也不是问题)。每次运行此命令时,控制流都会触发我的raise命令,并且不保存任何记录。很明显fileref.null?返回true,这告诉我上传过程有问题......但我不确定是什么。

理想情况下,我想使用多个上传选项并按顺序对每个文件运行此过程,但我甚至无法将单个上载注册为除null之外的任何内容。

0 个答案:

没有答案