Skip to end of metadata
Go to start of metadata
You are viewing an old version of this page. View the current version.
Compare with Current
View Page History
« Previous
Version 8
Next »
- 아래의 예제는 ruby는 '2.5.1', rails는 '5.2.3' 버전을 기준으로 작성되었습니다.
- 파일 업로드를 위해 gem에서 제공하는 'carrierwave'라는 업로더를 사용하였습니다.
- 설치 방법 1
- 설치 방법 2
- Gemfile에 gem 'carrierwave' 입력
- bundle install
1. 이미지 업로드(동영상, 파일 업로드도 동일)
1.1 모델 생성
rails generate model UploadFile # 프로젝트/app/models/upload_file.rb가 생성됨.
# upload_file.rb
class UploadFile < ApplicationRecord
mount_uploader :file, FileUploader
end
1.2 파일 업로더 생성
rails generate uploader File # 프로젝트/app/uploaders/file_uploader.rb가 생성됨.
#file_uploader.rb
Class FileUploader < CarrierWave::Uploader::Base
# Include RMagick or MiniMagick support:
# include CarrierWave::RMagick
# include CarrierWave::MiniMagick
# 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
"uploads/"
end
# Provide a default URL as a default if there hasn't been a file uploaded:
# def default_url(*args)
# # For Rails 3.1+ asset pipeline compatibility:
# # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
#
# "/images/fallback/" + [version_name, "default.png"].compact.join('_')
# end
# Process files as they are uploaded:
# process scale: [200, 300]
#
# def scale(width, height)
# # do something
# end
# Create different versions of your uploaded files:
# version :thumb do
# process resize_to_fit: [50, 50]
# end
# Add a white list of extensions which are allowed to be uploaded.
# For images you might use something like this:
# def extension_whitelist
# %w(jpg jpeg gif png)
# end
# Override the filename of the uploaded files:
# Avoid using model.id or version_name here, see uploader/store.rb for details.
def filename
"#{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
1.3 컨트롤러 생성
rails generate controller UploadFile # 프로젝트/app/controllers/upload_file_controller.rb가 생성됨.
#upload_file_controller.rb
class UploadFileController < ApplicationController
skip_before_action :verify_authenticity_token # csrf_token
def create
uploaded = UploadFile.create(file: params[:file])
render json:{
'uploadPath': uploaded.file.url
}
end
end
1.4 데이터베이스 마이그레이션
rails generate migration AddFileToUploadFile file:string # UploadFile에 파일을 담을 'file' 필드 추가
rake db:migrate
1.5 라우터 연결
#config/routes.rb
Rails.application.routes.draw do
...
resource :upload_file #라우터와 컨트롤러 연결
...
end