Faça upload de arquivos sem problemas para usuários com o Filestack

Carregar imagens é uma dor de cabeça. No cliente há input type = ‘file’, mas parece terrível e pode ser difícil de estilizar sem plug-ins adicionais. Além disso, você precisa enviar o formulário usando multiparte – seja o que for. No servidor não é melhor. Hospedar imagens pode ser caro para seu banco de dados e sua conta bancária. Configurar buckets AWS S3 e urls de referência em seu banco de dados é uma solução, mas demorado, especialmente se você não estiver familiarizado com o AWS. Tudo o que você quer fazer é permitir que os usuários carreguem uma foto de perfil! Digite Filestack , anteriormente denominado Filepicker.io.

tl; dr código-fonte no github .

iniciar

Vamos construir este tutorial usando a extremamente popular MEAN stack, que significa MongoDB, Express (um servidor web), Angular.js (estrutura de front-end) e Node.js (linguagem de script, ou seja, os javascripts ).

Eu construí um repositório que atua como um modelo inicial para aplicativos MEAN. Clone isso para começar um novo projeto.

$ git clone git@github.com:cleechtech/mean-starter.git
$ cd mean
-starter
$ npm install

$ node server

Em seguida, inscreva-se para uma conta de arquivo de arquivos grátis. Um ponto especial é que a camada gratuita suporta apenas 250 uploads de arquivos. Depois disso, o serviço custa US $ 99 por mês. Isso não é o ideal, mas se você está tentando fazer um MVP funcionar rapidamente, 250 há muitos arquivos!

Adicione a biblioteca javascript filestack ao seu projeto. Podemos adicioná-lo via cdn:
<script type="text/javascript" src="//api.filestackapi.com/filestack.js"></script>

Ou instale-o com bower: $ bower install filepicker-js --save

De qualquer forma, faça referência à biblioteca em public / index.html .

Configure Angular.js

Como estamos trabalhando com o angular, podemos usar o módulo angular-filepicker que as boas pessoas em filestack / filepicker (lembre-se de que mudaram de nome recentemente) fornecem para nós. Instale isso com caramanchão:

$ bower install angular-filepicker --save

Adicione a tag de script a public / index.html (após angular.js!):

<script src="bower_components/angular-filepicker/dist/angular_filepicker.js"></script>

e, em seguida, declare o módulo como uma dependência em public / js / app.js :

var app = angular.module('mean-boilerplate', [
'ui.router',
'angular-filepicker'
]);

No mesmo arquivo, configure sua chave api:

app.config(function($stateProvider, $urlRouterProvider, filepickerProvider){
$stateProvider

.state('home', {
url
: "/",
templateUrl
: "templates/home.html",
controller
: 'HomeCtrl'
});

$urlRouterProvider
.otherwise("/");

filepickerProvider
.setKey('<YOUR_API_KEY_HERE>');
});

Crie o uploader de arquivo

No modelo html principal, use a diretiva filepicker para criar um botão “Selecionar arquivo”, estilizado com bootstrap:

<div class='jumbotron text-center'>
<h1>Welcome to Filestack starter</h1>

<input filepicker type="filepicker" data-fp-services="computer,facebook,webcam,box" on-success="onSuccess(event.fpfile)" data-fp-button-class="btn btn-success" />

</div>

Em seguida, defina a matriz de arquivos e o método de sucesso no controlador principal:

app.controller('HomeCtrl', function($scope){
$scope
.files = [];

$scope
.onSuccess = function (Blob){
console
.log(Blob);
$scope
.files.push(Blob);
$scope
.$apply();
};

});

Finalmente, podemos renderizar o arquivo que carregamos na tela principal:

<div class='row'>
<div class='col-sm-12'>
<h3>Uploaded images</h3>
<div class='row' ng-repeat='file in files'>
<img ng-src='{{file.url}}' />
</div>
</div>
</div>
<div class='row'>
<div class='col-sm-12'>
<h3>Raw data</h3>
<pre>{{files | json}}</pre>
</div>
</div>

Assim que tivermos a url, hospedada pelo filepicker, podemos salvá-la em localStorage ou em nosso próprio banco de dados. Existem várias outras opções com o Filestack / Filepicker. Este tutorial apenas arranha a superfície do que você pode fazer!

Se você tiver dúvidas, questione o código-fonte .