mirror of https://github.com/portainer/portainer
feat(agent): add basic file upload
parent
d6e9e5c31d
commit
0abfca7554
|
@ -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;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
|
|
@ -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>
|
|
@ -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: '<'
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
]);
|
]);
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
]);
|
]);
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue