feat(agent): add basic file upload

pull/2337/head
Chaim Lev-Ari 2018-10-02 10:46:18 +03:00
parent d6e9e5c31d
commit 0abfca7554
6 changed files with 73 additions and 10 deletions

View File

@ -1,4 +1,26 @@
angular.module('portainer.agent') angular.module('portainer.agent').controller('FileUploaderController', [
.controller('FileUploaderController', [function 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;
});
}
}
]);

View File

@ -1,7 +1,20 @@
<rd-widget> <rd-widget>
<rd-widget-header icon="fa-upload" title-text="File Uploader"></rd-widget-header> <rd-widget-header icon="fa-upload" title-text="File Uploader"></rd-widget-header>
<rd-widget-body classes="no-padding"> <rd-widget-body>
<div>
<button class="btn btn-sm btn-primary" ngf-select ng-model="$ctrl.file">
Select file
</button>
<span style="margin-left: 5px;">
{{ $ctrl.file.name }}
<i class="fa fa-circle-notch fa-spin" ng-if="$ctrl.state.uploadInProgress"></i>
</span>
<button
ng-disabled="!$ctrl.file"
class="btn btn-sm btn-success" ng-click="$ctrl.uploadFile()">
Upload
</button>
</div>
</rd-widget-body> </rd-widget-body>
</rd-widget> </rd-widget>

View File

@ -1,4 +1,7 @@
angular.module('portainer.agent').component('fileUploader', { angular.module('portainer.agent').component('fileUploader', {
templateUrl: 'app/agent/components/file-uploader/file-uploader.html', templateUrl: 'app/agent/components/file-uploader/file-uploader.html',
controller: 'FileUploaderController' controller: 'FileUploaderController',
bindings: {
onFileUploaded: '<'
}
}); });

View File

@ -1,12 +1,13 @@
angular.module('portainer.agent').factory('HostBrowserService', [ angular.module('portainer.agent').factory('HostBrowserService', [
'Browse', 'Browse', 'Upload', 'API_ENDPOINT_ENDPOINTS', 'EndpointProvider', '$q',
function HostBrowserServiceFactory(Browse) { function HostBrowserServiceFactory(Browse, Upload, API_ENDPOINT_ENDPOINTS, EndpointProvider, $q) {
var service = {}; var service = {};
service.ls = ls; service.ls = ls;
service.get = get; service.get = get;
service.delete = deletePath; service.delete = deletePath;
service.rename = rename; service.rename = rename;
service.upload = upload;
function ls(path) { function ls(path) {
return Browse.ls({ path: path }).$promise; return Browse.ls({ path: path }).$promise;
@ -28,6 +29,16 @@ angular.module('portainer.agent').factory('HostBrowserService', [
return Browse.rename({}, payload).$promise; 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; return service;
} }
]); ]);

View File

@ -5,14 +5,26 @@ angular.module('portainer.docker').controller('NodeBrowserController', [
function NodeBrowserController(NodeService, HttpRequestHelper, $stateParams) { function NodeBrowserController(NodeService, HttpRequestHelper, $stateParams) {
var ctrl = this; var ctrl = this;
ctrl.refreshList = refreshList;
ctrl.$onInit = $onInit; ctrl.$onInit = $onInit;
function $onInit() { function $onInit() {
ctrl.nodeId = $stateParams.id; ctrl.nodeId = $stateParams.id;
loadNode();
}
function loadNode() {
NodeService.node(ctrl.nodeId).then(function onNodeLoaded(node) { NodeService.node(ctrl.nodeId).then(function onNodeLoaded(node) {
HttpRequestHelper.setPortainerAgentTargetHeader(node.Hostname); HttpRequestHelper.setPortainerAgentTargetHeader(node.Hostname);
ctrl.node = node; ctrl.node = node;
}); });
} }
function refreshList() {
}
} }
]); ]);

View File

@ -7,7 +7,9 @@
<div class="row"> <div class="row">
<div class="col-sm-12"> <div class="col-sm-12">
<file-uploader></file-uploader> <file-uploader
on-file-uploaded="$ctrl.refreshList"
></file-uploader>
</div> </div>
</div> </div>