Ember.js file uploader. Works with any browser that supports FormData.
Download the production version or the development version.
or using bower bower install ember-uploader --save
Create new component and extend EmberUploader.FileField
provided by ember-uploader. If you're using EmberUploader.FileField
, it will automatically give you an input field, and will set files
property when you choose a file.
App.FileUploadComponent = EmberUploader.FileField.extend({
url: '',
filesDidChange: (function() {
var uploadUrl = this.get('url');
var files = this.get('files');
var uploader = EmberUploader.Uploader.create({
url: uploadUrl
});
if (!Ember.isEmpty(files)) {
uploader.upload(files[0]);
}
}).observes('files')
});
Call the component, pass it the url, and thats it!
By default request will be sent as POST
. To override that, set type
when creating the object
var uploader = EmberUploader.Uploader.create({
url: '/upload',
type: 'PUT'
});
var uploader = Uploader.create({
paramNamespace: 'post'
});
// will be sent as -> post[file]=...
By default parameter will be file
var upload = Uploader.create({
paramName: 'upload'
});
// will be sent as -> upload=...
uploader.on('progress', function(e) {
// Handle progress changes
// Use `e.percent` to get percentage
});
uploader.on('didUpload', function(e) {
// Handle finished upload
});
Returned value from uploader will be a promise
var promise = uploader.upload(file);
promise.then(function(data) {
// Handle success
}, function(error) {
// Handle failure
});
App.FileUploadComponent = EmberUploader.FileField.extend({
multiple: true,
url: '',
filesDidChange: (function() {
var uploadUrl = this.get('url');
var files = this.get('files');
var uploader = EmberUploader.Uploader.create({ url: uploadUrl });
if (!Ember.isEmpty(files)) {
uploader.upload(files);
}
}).observes('files')
});
Uploading to S3 works in similar manner to the default uploader. There is only one extra step required before uploading.
You'll need to setup your backend to be able to sign the upload request, to be able to make an authenticated request to S3. This step is required to avoid saving secret token on your client.
App.S3UploadComponent = EmberUploader.FileField.extend({
url: ''
filesDidChange: (function() {
var uploadUrl = this.get('url');
var files = this.get('files');
var uploader = EmberUploader.S3Uploader.create({
url: uploadUrl
});
uploader.on('didUpload', function(response) {
// S3 will return XML with url
var uploadedUrl = $(response).find('Location')[0].textContent;
uploadedUrl = decodeURIComponent(uploadedUrl); // => http://yourbucket.s3.amazonaws.com/file.png
});
if (!Ember.isEmpty(files)) {
uploader.upload(files[0]); // Uploader will send a sign request then upload to S3
}
}).observes('files')
});
For learning how to setup the backend, check the wiki
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality.
Ember Uploader uses node.js and Ember CLI for builds and tests while using bower for dependency management. You will need to have these tools installed if you would like to build Ember Uploader.
$ npm install -g bower
$ npm install -g ember-cli
To get started with development simply do a npm install
inside the cloned repository to install all dependencies needed for running Ember CLI. This also executes bower install
for the runtime dependencies. Afterwards you can run ember build
which builds the library.
Lint and test your code using: ember test
. For headless testing you should have PhantomJS installed.
Also, please don't edit files in the "dist" subdirectory as they are generated via Ember CLI. You'll find source code in the "packages/ember-uploader/lib" subdirectory; tests are located in "packages/ember-uploader/tests"!
The Ember team, its contributors and community for being awesome. Also thank you to Erik Bryn and the contributors behind ember-model as well as TJ Holowaychuk for component/upload.
Copyright (c) 2014 Joshua Borton Licensed under the MIT license.