Это же очень просто (ага, когда есть пример).
[демо] — мультизагрузка с линейками прогресса, требуется регистрация.
[исходники] — комментарии по коду ниже.
1)
Стартую Метеор.
2)
Редактирую ./meteor/packages — джентльменский набор пакетов.
3)
Удаляю ботву — все файлы из корня проекта (.js, .html, .css). Добавляю: main.coffee, main.jade, main.less.
4)
main.coffee
5)
Публикую.
Сцылки.
[демо] — мультизагрузка с линейками прогресса, требуется регистрация.
[исходники] — комментарии по коду ниже.
1)
Стартую Метеор.
Чтобы не мешался экран терминала, запускаю в консоли [ctrl]+[alt]+[f4]; обратное переключение по [ctrl]+[alt]+[f7]. Это в Ubuntu.$ meteor create meteor-demo-cfs $ cd meteor-demo-cfs $ meteor
2)
Редактирую ./meteor/packages — джентльменский набор пакетов.
Метеор сам все поставит, как только файл будет сохранен.meteor-platform coffeescript less mquandalle:jade accounts-password ian:accounts-ui-bootstrap-3 twbs:bootstrap cfs:standard-packages cfs:filesystem cfs:gridfs cfs:ui
3)
Удаляю ботву — все файлы из корня проекта (.js, .html, .css). Добавляю: main.coffee, main.jade, main.less.
4)
main.coffee
# вымораживает же набирать cl = (something) -> console.log(something) # лениво же регистрироваться config = admin: email: 'demo@example.com', password: '12345678' if Meteor.isServer Meteor.startup -> if Meteor.users.find().count() is 0 seedUserId = Accounts.createUser email: config.admin.email, password: config.admin.password # photoStore - где будем хранить файлы, дополнительные опции закомментированы # https://github.com/CollectionFS/Meteor-CollectionFS#storage-adapters if Meteor.isClient # photoStore = new FS.Store.FileSystem 'photos' photoStore = new FS.Store.GridFS 'photos' if Meteor.isServer # photoStore = new FS.Store.FileSystem 'photos' photoStore = new FS.Store.GridFS 'photos', # mongoUrl: 'mongodb://127.0.0.1:27017/test/', # optional, defaults to Meteor's local MongoDB # mongoOptions: {...}, # optional, see note below # transformWrite: myTransformWriteFunction, # optional # transformRead: myTransformReadFunction, # optional # maxTries: 1, # optional, default 5 # chunkSize: 1024*1024 # optional, default GridFS chunk size in bytes (can be overridden per file). # # Default: 2MB. Reasonable range: 512KB - 4MB {} # коллекция с картинками Photos = new FS.Collection 'photos', stores: [photoStore] filter: allow: contentTypes: ['image/*'] # allow only images in this FS.Collection # про права доступа https://github.com/CollectionFS/Meteor-CollectionFS#security Photos.allow insert: (userId, file) -> userId and file.metadata?.userId is userId update: (userId, file, fieldNames, modifier) -> userId and file.metadata?.userId is userId remove: (userId, file) -> userId and file.metadata?.userId is userId download: (userId, file, shareId) -> true fetch: ['metadata.userId', 'original'] if Meteor.isClient # список вновь загруженных файлов newUpload = [] Meteor.startup -> Tracker.autorun -> if not Meteor.userId() # reset, если мы потеряли пользователя newUpload = [] Template.hello.events 'change input[type="file"]': (event, template) -> # FileAPI http://caniuse.com/#search=fileapi # или http://habrahabr.ru/company/mailru/blog/201010/ files = event.target.files count = files.length i = 0 while i < count newFile = new FS.File(files[i]) # цепляю к файлу свои метаданные https://github.com/CollectionFS/Meteor-CollectionFS#add-custom-metadata-to-a-file-before-inserting newFile.metadata = userId: Meteor.userId() Photos.insert newFile, (error, file) -> throw error if error # If !error, we have inserted new doc with ID file._id, and # kicked off the data upload using HTTP cl file i++ Template.hello.helpers # передаю в шаблон mongo-курсор photos: -> Photos.find() # это чтобы показывать progress-bar isNewUpload: -> if newUpload.indexOf(this._id) + 1 return true unless this.isUploaded() newUpload.push(this._id) return true return false # подписка на данные http://ru.discovermeteor.com/chapters/publications-and-subscriptions/ if Meteor.isServer Meteor.publish 'photos', (limit) -> check(arguments, [Match.Any]) [ Photos.find({}, {limit: limit}) ] if Meteor.isClient Meteor.subscribe 'photos', 100
5)
Публикую.
$ meteor deploy demo-cfs.meteor.com
Сцылки.
- Минимальный набор для старта CoffeeScript:
- Jade — скоростная верстка. Меньше кодинга, больше COD.
- Less — скоростной css. Меньше кодинга, больше COD.
- Про MongoDB.
- Про Meteor-CollectionFS.
- Про Метеор.
- Atom — прекрасный инструмент для кодинга в Метеоре от создателей GitHub. Дополнительно пакеты: Stylus, Sublime-Style-Column-Selection, language-jade, meteor-snippets, todo-show.