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-input
que é 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-upload
mé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