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')
|
||||
.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;
|
||||
});
|
||||
}
|
||||
}
|
||||
]);
|
||||
|
|
|
@ -1,7 +1,20 @@
|
|||
<rd-widget>
|
||||
<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>
|
|
@ -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: '<'
|
||||
}
|
||||
});
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
]);
|
||||
|
|
|
@ -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() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
]);
|
||||
|
|
|
@ -7,7 +7,9 @@
|
|||
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<file-uploader></file-uploader>
|
||||
<file-uploader
|
||||
on-file-uploaded="$ctrl.refreshList"
|
||||
></file-uploader>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
Loading…
Reference in New Issue