A simple file sharing site with an easy to use API and online panel.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

56 lines
2.3KB

  1. var angular = require('angular');
  2. angular.module('UploadComp', ['ngFileUpload', 'AuthSvc']).component('uploadComponent', {
  3. templateUrl: '/views/shrimpa/upload-form.html',
  4. controller: ['$scope', 'Upload', '$timeout', function ($scope, Upload, $timeout) {
  5. $scope.errToString = function (err) {
  6. if (err === 'maxSize')
  7. return "File too large.";
  8. else
  9. return err;
  10. };
  11. $scope.uploadFiles = function (files, errorFiles) {
  12. $scope.files = $scope.files ? $scope.files.concat(files) : files;
  13. $scope.errorFiles = $scope.errorFiles ? $scope.errorFiles.concat(errorFiles) : errorFiles;
  14. files.reduce((promise, file) => {
  15. return promise.then(() => new Promise((resolve, reject) => {
  16. file.upload = Upload.upload({
  17. url: '/api/upload',
  18. method: 'POST',
  19. file: file
  20. });
  21. file.upload.then(
  22. function (response) {
  23. resolve();
  24. $timeout(function () {
  25. file.result = response.data;
  26. });
  27. },
  28. function (response) {
  29. if (response.status !== 200) {
  30. if (response.status === 401) {
  31. file.$error = "Unauthorized.";
  32. } else if (response.status === 403) {
  33. file.$error = "Forbidden.";
  34. } else {
  35. file.$error = "Unknown error " + response.status;
  36. }
  37. var index = $scope.files.indexOf(file);
  38. $scope.errorFiles.push(file);
  39. $scope.files.splice(index, 1);
  40. }
  41. },
  42. function (evt) {
  43. file.progress = Math.floor(Math.min(100.0, 100 * evt.loaded / evt.total));
  44. }
  45. );
  46. }));
  47. }, Promise.resolve());
  48. };
  49. }],
  50. controllerAs: 'vm'
  51. });