1

我正在尝试在 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,这表明上传过程有问题……但我不确定是什么。

理想情况下,我想使用多次上传选项并按顺序在每个文件上运行此过程,但我什至无法将单个上传注册为空值。

4

0 回答 0