我正在尝试在 Rails 中构建一个应用程序,它将上传音频文件并从它们中读取元数据以填充数据库。我正在使用 Taglib-ruby gem 来处理各种文件类型。上传似乎是自己进行的,但 Taglib 认为给它的任何文件都是空的。
这是我的控制器:
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 本身似乎正在工作 - 添加“需要'taglib'”消除了我一直在这方面遇到的错误,并且我在 Rails 之外制作的模型工作正常(所以我正在使用的文件也是不是问题)。每次我运行它时,控制流都会触发我的 raise 命令,并且不会保存任何记录。很明显fileref.null?返回 true,这表明上传过程有问题……但我不确定是什么。
理想情况下,我想使用多次上传选项并按顺序在每个文件上运行此过程,但我什至无法将单个上传注册为空值。