ng-file-uploadとCarrierwaveを組み合わせて複数のファイルをアップロードしようとしていますが、サーバー側のコントローラーは 1 つのファイル (選択したファイルの最後の項目) しか受け取りません。
クライアント側(参照)
html
<button type="file" ng-model="files" ngf-select ngf-multiple="true">Upload</button>
js
var upload = function (files, content) {
return Upload.upload({
url: 'MY_CONTROLLER_URL',
file: files, // files is an array of multiple files
fields: { 'MY_KEY': 'MY_CONTENT' }
}).progress(function (evt) {
var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);
console.log('progress: ' + progressPercentage + '% ' + evt.config.file.name);
}).success(function (data, status, headers, config) {
console.log('files ' + config.file.name + ' uploaded. Response: ' + data);
}).error(function (data, status, headers, config) {
console.log('error status: ' + status);
});
};
console.log(files)
Array[File, File, ...] を出力します(ブラウザ: FireFox)。したがって、クライアント側では、選択したファイルを取得します。ng-file-uploadのGitHubページでは、.html5
サーバー側(参考)
posts_controller.rb
def create
@post = Post.new(post_params)
@post.attaches = params[:file]
@post.save
render json: @post
end
private
def post_params
params.require(:post).permit(:content, :file)
end
は@post.attaches
投稿の添付ファイルで、 のパラメータparams[:file]
によってクライアント側から送信されます。file
Upload.upload
ファイルの配列を に保存したいのですが、選択したファイルのうち 1 つのファイルしか含まれていません
@post.attaches
。プリント:params[:file]
puts params[:file]
#<ActionDispatch::Http::UploadedFile:0x007fddd1550300 @tempfile=#<Tempfile:/tmp/RackMultipart20150812-2754-vchvln.jpg>, @original_filename="Black-Metal-Gear-Rising-Wallpaper.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"file\"; filename=\"Black-Metal-Gear-Rising-Wallpaper.jpg\"\r\nContent-Type: image/jpeg\r\n">
これは、 にファイルが 1 つしかないことを示していますparams[:file]
。このパラメーターの使用法に問題があるかどうかはわかりません。
どうすればこの問題を解決できますか?
これが私のpost.rb
モデルであり、必要に応じて参照用に( carrierwaveattach_uploader.rb
によって作成された):
post.rb
class Post < ActiveRecord::Base
mount_uploaders :attaches, AttachUploader
end
attach_uploader.rb
class AttachUploader < CarrierWave::Uploader::Base
storage :file
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
end
データベースの@post.attaches
列posts
はによって追加されます
rails g migration add_attaches_to_posts attaches:json