LoginSignup
55
69

More than 5 years have passed since last update.

dropzone.jsでファイルアップロードUIをつくる

Last updated at Posted at 2016-02-27

dropzone.jsとは

ドラッグ&ドロップのファイルアップロードUIが作れるjsのライブラリ。

dropzone.jsでできること

  1. ドラッグ&ドロップによるファイルアップロードUIの提供
  2. アップロードしたファイルを非同期でサーバへpost
  3. アップロードしたファイルのプレビュー表示
  4. アップロードの進捗ステータスを表示

ダウンロード

dropzone.js公式サイトからダウンロード

使い方

HTML
<script src="jquery.js"></script>
<script src="dropzone.js"></script>

<form class="dropzone" id="my-awesome-dropzone">
  <input name="file" type="file" id="my-awesome-dropzone" multiple />
</form>
<div class='drag-and-drop-area'></div>
CoffeeScript
# Dropzone設定
Dropzone.autoDiscover = false
# Dropzoneフォームのidをキャメルケースで記述
Dropzone.options.myAwesomeDropzone = {}

# Dropzone初期化(urlはpost先を指定)
myDropzone = new Dropzone '.drag-and-drop-area', {url: '/images/upload'}

これでドラッグ&ドロップ可能なUIと非同期でサーバにファイルをpostできるようになる。簡単。

実装サンプル

Tumblr.png

sample.html
<div class="drag-and-drop-area drag-and-drop-area-out">
  <span>
    <i class="fa fa-image"></i>
    Drag and drop your files
  </span>
</div>
style.css
.drag-and-drop-area {
  color: #ccc;
  height: 200px;
  margin: 30px 0 20px;
  border-style: dashed;
  border-width: 2px;
  line-height: 200px;
  text-align: center;
  cursor: pointer;
}

.drag-and-drop-area-over {
  border-color: #0000FF;
}

.drag-and-drop-area-over span {
  opacity: 0.2;
}

.drag-and-drop-area-out {
  border-color: #ccc;
}

.drag-and-drop-area-out span {
  opacity: 1;
}
file_upload.coffee
$ ->
  Dropzone.autoDiscover = false
  Dropzone.options.myAwesomeDropzone = {
    paramName : "file"
    parallelUploads: 1
    acceptedFiles: 'image/*'
    maxFiles: 10
    maxFilesize: 0.5
    dictFileTooBig: "uploaded file is too large({{filesize}}MiB). limit: {{maxFilesize}}MiB."
    dictInvalidFileType: "Image file only"
    dictMaxFilesExceeded: "10 files limit"
  }

  myDropzone = new Dropzone ".drag-and-drop-area", {url:"/images/async_upload"}

  $('.drag-and-drop-area').on {
    click: (e)->
      $('#file_input').click()
    mouseover: (e)->
      $(this).removeClass('drag-and-drop-area-out')
      $(this).addClass('drag-and-drop-area-over')
    mouseout: (e)->
      $(this).removeClass('drag-and-drop-area-over')
      $(this).addClass('drag-and-drop-area-out')
    dragover: (e)->
      $(this).removeClass('drag-and-drop-area-out')
      $(this).addClass('drag-and-drop-area-over')
    dragleave: (e)->
      $(this).removeClass('drag-and-drop-area-over')
      $(this).addClass('drag-and-drop-area-out')
  }

おしまい

他にもオプションやコールバックが用意されているので、カスタマイズして色々遊べそう。
公式サイト : http://www.dropzonejs.com/

55
69
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
55
69