Skip to content

An example implementation of jQuery File Upload in Rails 4.2 with Paperclip. The app supports resumable (chunked) file uploads.

License

Notifications You must be signed in to change notification settings

vgantchev/rails-resumable-jquery-fileupload

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Resumable (chunked) uploads in Rails 4.2 using Paperclip and jQuery File Upload

Description

This is an example implementation of jQuery File Upload in Rails 4.2 using Paperclip. The app uses the gem jquery-fileupload-rails to integrate the relevant libraries into the Rails Asset Pipeline.

Installation

bundle install
rake db:create && rake db:migrate

Features

The app has one model Course, which has_attached_file :upload. Once a Course has been created, the user is redirected to the upload action of CoursesController. The user can choose a local file to upload.

When the user initiates the upload, jQuery File Upload does an AJAX request to the resume_upload action in order to establish whether there is an unfinished/interrupted upload. A JSON contianing information about the already uploaded bytes is returned. jQuery File Upload will then continue the upload from the last uploaded chunk (or from the beginning).

The PATCH request containing the first or following chunk of the uploaded file is processed by the do_upload action. This action checks again whether the file exists in the system.

  • If a new file: Course.status is updated from 'new' to 'uploading' and the first chunk is saved.
  • If an unfinished upload: by taking the current file size as a point of reference, the controller action makes sure that the Content-Range from the request headers corresponds to the following chunk that needs to be uploaded. If true, the chunk is written to the existing file.

Once the file upload has been completed, the callback of jQuery File Upload triggers an AJAX request to the update_status action, which make sure that Course.status is set from 'uploading' to 'uploaded'.

Some remarks

  • The app accepts only pdf files. Validations and checks have been added on the frontend as well as on the backend
  • Currently, the app supports only single uploads (one file per Course). The backend can be easily modified to work with multiple uploads
  • The GET upload action contains a link to remove any unfinished uploads, just in case the user expieriences unexpected errors when trying to resume
  • Sharing is caring, so feel free to contribute!

About

An example implementation of jQuery File Upload in Rails 4.2 with Paperclip. The app supports resumable (chunked) file uploads.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published