私は自分のアプリ Carrierwave でサウンドのアップロードに使用しています。
しかし、アップロードするサウンドを選択すると、"toto.mp3" のような間違ったサウンドだったので、"titi.mp3" のような別のサウンドを選択し直すというバグがあります。今私のサウンドをアップロードすると、私のアプリのファイルは最初に選択されたサウンドなので「toto.mp3」ですが、「toto.mp3」ではなく「titi.mp3」を選択します。
助けていただければ、このバグを解決する方法がわかりません。
アップローダー
# encoding: utf-8
require 'carrierwave/processing/mime_types'
class SoundUploader < CarrierWave::Uploader::Base
include CarrierWave::MimeTypes
# Choose what kind of storage to use for this uploader:
storage :file
# storage :fog
# Override the directory where uploaded files will be stored.
# This is a sensible default for uploaders that are meant to be mounted:
def store_dir
"#{Rails.root}/tmp/files/#{model.user_id}/#{model.id}"
end
def extension_white_list
%w(3ga 3gp 3g2 3gpp 3gp2 m4a m4b m4p m4v m4r mp4 aac flac flv avi asf wma wmv dpx mkv mka mks bwf mpg mpeg mp1 mp2 mp3
m1v m1a m2a mpa mpv rm mov ogm ogg ogv oga ogx nut riff webm weba wav mxf asx ts aiff aif aifc au snd caf)
end
# Override the filename of the uploaded files:
# Avoid using model.id or version_name here, see uploader/store.rb for details.
def filename
model.title = original_filename if model.title.to_s == ''
"#{secure_token}.#{file.extension}" if original_filename.present?
end
protected
def secure_token
var = :"@#{mounted_as}_secure_token"
model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.uuid)
end
end
そして私のJavascript:
$(function () {
$('#new_sound').fileupload({
dataType: 'script',
dropZone: $('#new_sound'),
acceptFileTypes: /(3ga|3gp|3g2|3gpp|3gp2|m4a|m4b|m4p|m4v|m4r|mp4|aac|flac|flv|avi|asf|wma|wmv|dpx|mkv|mka|mks|bwf|mpg|mpeg|mp1|mp2|mp3|m1v|m1a|m2a|mpa|mpv|rm|mov|ogm|ogg|ogv|oga|ogx|nut|riff|webm|weba|wav|mxf|asx|ts|aiff|aif|aifc|au|snd|caf)$/i,
limitMultiFileUploads: 1,
add: function (e, data){
var file = data.files[0];
var filetype = $(this).fileupload('option', 'acceptFileTypes');
if (filetype.test(file.name)) {
$('#title').val(file.name);
$('#select_file').css('color', '#00A300');
$('#send_file').css('display', 'inline');
$("#send_file").on('click', function () { data.submit(); });
$("#stop_file").on('click', function () {
$('#progress_file .bar').css('width', '0%');
data.abort();
});
}
else {
alert('Format de fichier non supporté.');
}
},
progress: function (e, data){
var progress = parseInt(data.loaded / data.total * 100, 10);
$('#progress_file .bar').css('width', progress + '%');
},
});
});