ファイルをアップロードすることから始めましょう。 私はあなたが今そのようなinit.rbファイルを持っていると仮定します:
# coding: utf-8 require 'rubygems' require 'sinatra' require 'data_mapper' require 'carrierwave' require 'carrierwave/datamapper' require 'rmagick' require 'json' set :public_directory, './public' class ImageUploader < CarrierWave::Uploader::Base def store_dir 'uploads/images' end def extension_white_list %w(jpg jpeg gif png bmp) end include CarrierWave::RMagick version :thumb do process :resize_to_fill => [100,74] end storage :file end class Post include DataMapper::Resource property :id, Serial property :title, String property :body, Text end class UploadedImages include DataMapper::Resource property :id, Serial property :image, String property :thumb, String mount_uploader :file, ImageUploader end class UploadedFiles include DataMapper::Resource property :id, Serial property :name, String property :path, String end DataMapper.setup(:default, ENV['DATABASE_URL'] || 'sqlite:./db/base.db') DataMapper.finalize DataMapper.auto_upgrade! get '/' do 'REST Sinatra <a href="/posts"> </a>' end #List posts get '/posts' do @posts = Post.all erb :'index' end #Create new Post get '/posts/new' do erb :'posts/new' end post '/posts/new' do params.delete 'submit' @post = Post.create(params) redirect '/posts' end #Edit post get '/posts/:id/edit' do @post = Post.get(params[:id]) erb :'posts/edit' end #Update post put '/posts/:id/edit' do post = Post.get(params[:id]) post.title = (params[:title]) post.body = (params[:body]) post.save redirect '/posts' end #Delete post get '/posts/:id/delete' do Post.get(params[:id]).destroy redirect '/posts' end post '/upload/image' do params[:file] filename = params[:file][:filename] file = params[:file][:tempfile] upload = UploadedImages.new upload.file = params[:file] upload.image = params[:image] = '/uploads/images/' + File.join(filename) upload.thumb = params[:thumb] = '/uploads/images/thumb_' + File.join(filename) upload.save @images = UploadedImages.all File.open("public/uploads/images/imageslist.json","w") do |f| f.write JSON.pretty_generate(@images) end '<img src="/uploads/images/' + File.join(filename) + '" />' end
したがって、public / uploadsディレクトリにfilesフォルダーを作成し、新しいUploadedFilesモデルを作成して、ファイルをアップロードするためのpostメソッドを追加します
set :files, File.join(settings.public_directory, 'uploads/files') # public (set :public_directory, './public' init.rb) , class UploadedFiles include DataMapper::Resource property :id, Serial # property :name, String # property :path, String # end post '/upload/file' do params[:file] filename = params[:file][:filename] file = params[:file][:tempfile] ext = File.extname(filename) # , , . if ext == ".doc" || ext == ".zip" || ext == ".dmg" # 3 doc, zip, dmg, . File.open(File.join(settings.files, filename), 'wb') # - upload_f = UploadedFiles.new # UploadedFile upload_f.name = params[:name] = File.join(filename) # UploadedFiles :name, upload_f.path = params[:path] = '/uploads/files/' + File.join(filename) # UploadedFiles :path, upload_f.save # '<a href="/uploads/files/' + File.join(filename) + '" />' + File.join(filename) + '</a>' # end end
ファイルをアップロードする方法をエディターに正確に伝え、layout.erbを開いて行を見つけます
$('.redactor_1').redactor({toolbar: 'default', lang: 'ru', imageUpload: '/upload/image', imageGetJson: '/uploads/images/imageslist.json'});
fileUpload設定を追加します。「/ upload / file」は次のようになります
$('.redactor_1').redactor({toolbar: 'default', lang: 'ru', imageUpload: '/upload/image', fileUpload: '/upload/file', imageGetJson: '/uploads/images/imageslist.json'});
必要なすべての設定を行いました。モデルの作成、ダウンロードしたファイルへのパスの設定、ファイルのダウンロード自体の実装、許可されたファイルのチェックを行いました。 ここで注意したいのは、ファイル拡張子が許可された拡張子と一致しない場合はエラーメッセージを実装することですが、2つのBUTがあります:最初に、Redactor.jsはフレーム内のすべてを行い、エラーメッセージが作成された場合、それが書き込まれます私の考えでは、gem sinatra-flashを介してエラーメッセージを実装しようとした場合、テキストエリアでは、これは良いアイデアではありません。エラーはページがリロードされた後にのみ表示されるためです。 さて、おそらくより経験豊富な人が掘る方法を教えてくれます。
それでは、ダウンロードした画像の管理を始めましょう。ダウンロードした画像をすべてリストし、削除するだけです。
init.rbに追加
#init.rb #List UploadedImages get '/images' do @ uploadedimage = UploadedImages.all # /images ( uploadedimage) erb :'images' # images.erb end #Delete UploadedImage get '/images/:id/delete' do # ID UploadedImages.get(params[:id]).destroy # ( , - , !...) redirect '/images' # end
viewsディレクトリにimages.erbファイルを作成します
<strong><a href="/posts"> post'</a></strong> <h2> </h2> <% @ uploadedimage.each do |uploadedimages| %> <a href="<%= uploadedimages.image %>"><img src="<%= uploadedimages.thumb %>"></a><br> # <a href="/images/<%= uploadedimages.id %>/delete"></a><br><br> <% end %>
さて、アプリケーションは完成しました。 画像管理と同様に、ファイル管理も実行できます。 かなりうまくいったと思う。 これで終わりではありません。RubyとSinatraの研究を続けており、さらに記事があります。
Githubソースコード
PS:私が出会うどこでも
または<hh user=posts>
@variable_nameに置き換えるだけです<hh user=images>