Upload de arquivo com o método Meteor

Usando a excelente biblioteca BootStrap editada por Jasny , é muito fácil criar um botão de upload que envia o conteúdo de um arquivo para umMeteor.method

Primeiro crie o botão de upload de arquivo:

<div class="fileupload fileupload-new" data-provides="fileupload">
<span class="btn btn-file">
<span class="fileupload-new">{{file-upload.label.de}}</span>
<span class="fileupload-exists">Andere</span>
<input name="{{file-upload.name}}" class="file-upload-input" method="{{file-upload.method}}" type="file"/>
</span>
<span class="fileupload-preview">
</span>
<a href="#" class="close fileupload-exists" data-dismiss="fileupload" style="float: none">×</a>
</div>

No meu exemplo, todos os campos de upload de arquivo têm uma classe comum file-upload-inputque é usada para criar o evento.

No javascript do modelo você deve fornecer o evento:

"change .file-upload-input": function(event, template){
var func = this;
var file = event.currentTarget.files[0];
var reader = new FileReader();
reader
.onload = function(fileLoadEvent) {
Meteor.call('file-upload', file, reader.result);
};
reader
.readAsBinaryString(file);
}

neste exemplo, os arquivos são carregados assim que são selecionados. Ainda existe a opção de alterar a seleção.

No servidor, o file-uploadmétodo é muito simples:

Meteor.methods({
'file-upload': function (fileInfo, fileData) {
console
.log("received file " + fileInfo.name + " data: " + fileData);
fs
.writeFile(fileInfo.name, fileData);
}
});

Isso armazenará o arquivo no local padrão. Se precisar colocá-lo em outro lugar, você precisará especificar o caminho.

Mas se você leva a sério o upload de arquivos, verifique (e possivelmente contribua com) o pacote de meteoritos https://github.com/raix/Meteor-CollectionFS