From 0abfca755488eb4f2846903ea0eb0188217d7263 Mon Sep 17 00:00:00 2001 From: Chaim Lev-Ari Date: Tue, 2 Oct 2018 10:46:18 +0300 Subject: [PATCH] feat(agent): add basic file upload --- .../file-uploader/file-uploader-controller.js | 30 ++++++++++++++++--- .../file-uploader/file-uploader.html | 17 +++++++++-- .../components/file-uploader/file-uploader.js | 5 +++- app/agent/services/hostBrowserService.js | 15 ++++++++-- .../node-browser/node-browser-controller.js | 12 ++++++++ .../nodes/node-browser/node-browser.html | 4 ++- 6 files changed, 73 insertions(+), 10 deletions(-) diff --git a/app/agent/components/file-uploader/file-uploader-controller.js b/app/agent/components/file-uploader/file-uploader-controller.js index a537088b0..3afd1230f 100644 --- a/app/agent/components/file-uploader/file-uploader-controller.js +++ b/app/agent/components/file-uploader/file-uploader-controller.js @@ -1,4 +1,26 @@ -angular.module('portainer.agent') -.controller('FileUploaderController', [function FileUploaderController(){ - -}]); +angular.module('portainer.agent').controller('FileUploaderController', [ + 'HostBrowserService', 'Notifications', + function FileUploaderController(HostBrowserService, Notifications) { + var ctrl = this; + + ctrl.state = { + uploadInProgress: false + }; + + ctrl.uploadFile = uploadFile; + + function uploadFile() { + ctrl.state.uploadInProgress = true; + HostBrowserService.upload('/', ctrl.file) + .then(function onFileUpload() { + ctrl.onFileUploaded(); + }) + .catch(function onFileUpload(err) { + Notifications.error('Failure', err, 'Unable to upload file'); + }) + .finally(function toggleUploadProgress() { + ctrl.state.uploadInProgress = false; + }); + } + } +]); diff --git a/app/agent/components/file-uploader/file-uploader.html b/app/agent/components/file-uploader/file-uploader.html index afb899e00..a86a17ed2 100644 --- a/app/agent/components/file-uploader/file-uploader.html +++ b/app/agent/components/file-uploader/file-uploader.html @@ -1,7 +1,20 @@ - - + +
+ + + {{ $ctrl.file.name }} + + + +
\ No newline at end of file diff --git a/app/agent/components/file-uploader/file-uploader.js b/app/agent/components/file-uploader/file-uploader.js index d0ec1a189..a03b406e0 100644 --- a/app/agent/components/file-uploader/file-uploader.js +++ b/app/agent/components/file-uploader/file-uploader.js @@ -1,4 +1,7 @@ angular.module('portainer.agent').component('fileUploader', { templateUrl: 'app/agent/components/file-uploader/file-uploader.html', - controller: 'FileUploaderController' + controller: 'FileUploaderController', + bindings: { + onFileUploaded: '<' + } }); diff --git a/app/agent/services/hostBrowserService.js b/app/agent/services/hostBrowserService.js index 81c2cfc94..935d34be4 100644 --- a/app/agent/services/hostBrowserService.js +++ b/app/agent/services/hostBrowserService.js @@ -1,12 +1,13 @@ angular.module('portainer.agent').factory('HostBrowserService', [ - 'Browse', - function HostBrowserServiceFactory(Browse) { + 'Browse', 'Upload', 'API_ENDPOINT_ENDPOINTS', 'EndpointProvider', '$q', + function HostBrowserServiceFactory(Browse, Upload, API_ENDPOINT_ENDPOINTS, EndpointProvider, $q) { var service = {}; service.ls = ls; service.get = get; service.delete = deletePath; service.rename = rename; + service.upload = upload; function ls(path) { return Browse.ls({ path: path }).$promise; @@ -28,6 +29,16 @@ angular.module('portainer.agent').factory('HostBrowserService', [ return Browse.rename({}, payload).$promise; } + function upload(path, file, onProgress) { + var deferred = $q.defer(); + var url = API_ENDPOINT_ENDPOINTS + '/' + EndpointProvider.endpointID() + '/docker/browse/put'; + Upload.upload({ + url: url, + data: { file: file, Path: path } + }).then(deferred.resolve, deferred.reject, onProgress); + return deferred.promise; + } + return service; } ]); diff --git a/app/docker/views/nodes/node-browser/node-browser-controller.js b/app/docker/views/nodes/node-browser/node-browser-controller.js index cd0706371..bc4481c94 100644 --- a/app/docker/views/nodes/node-browser/node-browser-controller.js +++ b/app/docker/views/nodes/node-browser/node-browser-controller.js @@ -5,14 +5,26 @@ angular.module('portainer.docker').controller('NodeBrowserController', [ function NodeBrowserController(NodeService, HttpRequestHelper, $stateParams) { var ctrl = this; + + ctrl.refreshList = refreshList; ctrl.$onInit = $onInit; function $onInit() { ctrl.nodeId = $stateParams.id; + loadNode(); + } + + function loadNode() { NodeService.node(ctrl.nodeId).then(function onNodeLoaded(node) { HttpRequestHelper.setPortainerAgentTargetHeader(node.Hostname); ctrl.node = node; }); } + + function refreshList() { + + } + + } ]); diff --git a/app/docker/views/nodes/node-browser/node-browser.html b/app/docker/views/nodes/node-browser/node-browser.html index cef6d5872..6db00486e 100644 --- a/app/docker/views/nodes/node-browser/node-browser.html +++ b/app/docker/views/nodes/node-browser/node-browser.html @@ -7,7 +7,9 @@
- +