Paperclip と Dropzone.js を使用してファイルを S3 に直接アップロードする

通常、私たちが最もイライラするのは、時間のかかる小さなタスクです。 S3 へのファイルのアップロードなど。要件は非常に単純ですが、ファイルをアップロードするために選択した方法によってタスクの効率が決まります。ファイルのアップロードはほとんどのアプリケーションに必要な機能であるため、RailsCarma はこのタスクを効率的に実行するための最良の方法の 1 つである Paperclip と Dropzone.js の使用に関する簡単なチュートリアルをまとめました。

  • ペーパークリップ 添付ファイルを処理するための優れた機能を提供するため、画像やファイルをアップロードするための一般的な選択肢です。 「ペーパークリップ」ジェムは頼りになるオプションです。 Paperclip を使用すると、複数の画像やファイルをアップロードしたり、サムネイルを生成したり、画像のサイズを自動的に変更したりすることができます。大規模で活発なコミュニティを誇り、ほとんどの開発者の第一の選択肢となっています。
  • ドロップゾーン.js ファイルのドラッグ アンド ドロップ (画像プレビュー付き) 機能を備えたオープン ソース ライブラリです。
  • アマゾンS3 データを保存するための単純なストレージ デバイスです。これを使用して、画像やあらゆる種類のファイルを取得できます。

なぜペーパークリップなのか?

Paperclip は、次の理由から人気のあるファイル アップロード ツールです。

  • ファイル キャッシュのサポート:
    フォームの検証に失敗した場合、ユーザーがファイルを再度選択して再アップロードすることは望ましくありません。したがって、UX の観点からファイルのキャッシュが必要です。また、帯域幅も節約されます。
  • 画像を処理する
    Paperclip は、画像のサイズを変更したり、いくつかの異なる形式にトリミングしたりできるため、開発者はライブラリを選択できます。
  • タスクを簡素化します!
    Paperclip gem はコードを汚さず、テストが簡単です。
  • ファイル処理を許可します
    Paperclip では、EXIF データ抽出のためのファイル処理と、アップロードされた PDF、PSD、DOC、XLSX のサムネイル作成が可能です。
  • CDN とストレージ サービスのサポートを提供 
    サーバーへの帯域幅を可能な限り低く保ち、サーバー障害によるデータ損失の可能性を回避したいため、これは大きな利点です。
  • オンザフライ処理を提供
    Paperclip は、リクエストごとに画像とファイルを処理します。これは、開発者がさまざまな状況に最適に適応するカスタム コンテンツを作成できるようにする革新的な機能です。

Dropzone の非同期イベントとは何ですか?

  • 追加されたファイル:  ファイルがリストに追加されたとき。
  • 削除されたファイル: ファイルがリストから削除されるたびに使用されます。必要に応じて、これを聞いてサーバーからファイルを削除できます。
  • サムネイル: サムネイルが生成されたとき。データ URL を 2 番目のパラメーターとして受け取ります。
  • エラー: エラーが発生した場合は、エラー メッセージを 2 番目のパラメータとして受け取ります。また、エラーの原因が xmlhttprequest である場合は、xhr オブジェクトが 3 番目のパラメーターとして受信されます。
  • 処理: ファイルが処理されるとき (キューがあるため、すべてのファイルがすぐに処理されるわけではありません)。このイベントは、以前は処理ファイルと呼ばれていました。
  • 落とす: ユーザーがドロップ ゾーンに何かをドロップしました。

アプリケーションでペーパークリップを構成するにはどうすればよいですか?

  • has_attached _file: アセット
  • :ストレージ => :s3
  • :S3_ホスト名 => ENV[“S3_ホスト名”]
  • :S3_region => ENV[“S3_REGION”]
  • :S3_プロトコル => ENV[“S3_プロトコル”]
  • :path => “:account_id/:class/:source_id/:attachment/:file_name”,:s3_headers => {'ContentDisposition' => 'attachment', 'content-type' => 'application/octet_stream'},
    :bucket => ENV[“S3_BUCKET”],
    :s3_credentials => Proc.new{|a| a.instance.s3_credentials}
  • Do_not_validate_attachment_file_type :asset
  • def s3_credentials
    {:access_key_id => ENV[“S3_ACCESS_KEY_ID”], :secret_access_key => ENV[“S3_SECRET_ACCESS_KEY”]}

終わり

アプリケーションでカスタム パスを処理するにはどうすればよいでしょうか?

Paperclip.interpolates :attachment do |attachment, style|Image_extension = [“jpg”, “jpeg”, “gif”, “png”, “PNG”, “GIF”, “JPEG”, “JPG”] extname = ファイル。 extname(attachment.instance.asset_file_name).downcase.gsub(/\./, '') if img_extension.include? (extname) return “images” else return extname end end Paperclip.interpolates :file_name do |attachment, style|file_name =attachment.instance.asset_file_name End

S3 バケット内のデータは、必要なときにいつでも取得できます。ただし、これには制限が 1 つあります。異なるディレクトリ構造のカスタム パスの処理は非常に面倒になる可能性があります。そんな時に便利なのがペーパークリップです。これは、AWS を使用して S3 バケットに画像をアップロードして保存するための優れたツールです。

レイルスカルマでは、世界中のクライアント向けに Ruby のフレームワークを使用した最先端の Web アプリケーション サービスを開発、提供しています。
他のレール開発関連の問題に対する革新的なソリューションが必要ですか? 今すぐご連絡ください!

最新のアップデートを購読する

関連記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

jaJapanese