我正在尝试在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之外的任何内容。