mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-06 13:17:41 +00:00
GUAC-1172: Implement file upload through object streams.
This commit is contained in:
@@ -27,6 +27,7 @@ angular.module('client').controller('clientController', ['$scope', '$routeParams
|
||||
function clientController($scope, $routeParams, $injector) {
|
||||
|
||||
// Required types
|
||||
var ManagedClient = $injector.get('ManagedClient');
|
||||
var ManagedClientState = $injector.get('ManagedClientState');
|
||||
var ManagedFilesystem = $injector.get('ManagedFilesystem');
|
||||
var ScrollState = $injector.get('ScrollState');
|
||||
@@ -635,6 +636,25 @@ angular.module('client').controller('clientController', ['$scope', '$routeParams
|
||||
ManagedFilesystem.changeDirectory(filesystem, file);
|
||||
};
|
||||
|
||||
/**
|
||||
* Begins a file upload through the attached Guacamole client for
|
||||
* each file in the given FileList.
|
||||
*
|
||||
* @param {FileList} files
|
||||
* The files to upload.
|
||||
*/
|
||||
$scope.uploadFiles = function uploadFiles(files) {
|
||||
|
||||
// Ignore file uploads if no attached client
|
||||
if (!$scope.client)
|
||||
return;
|
||||
|
||||
// Upload each file
|
||||
for (var i = 0; i < files.length; i++)
|
||||
ManagedClient.uploadFile($scope.client, files[i], $scope.filesystemMenuContents);
|
||||
|
||||
};
|
||||
|
||||
// Clean up when view destroyed
|
||||
$scope.$on('$destroy', function clientViewDestroyed() {
|
||||
|
||||
|
@@ -171,6 +171,7 @@
|
||||
<!-- Stationary header -->
|
||||
<div class="header">
|
||||
<h2>{{filesystemMenuContents.name}}</h2>
|
||||
<button class="upload button" guac-upload="uploadFiles">{{'CLIENT.ACTION_UPLOAD_FILES' | translate}}</button>
|
||||
<button class="back" ng-click="hideFilesystemMenu()">Back</button>
|
||||
</div>
|
||||
|
||||
|
@@ -438,9 +438,31 @@ angular.module('client').factory('ManagedClient', ['$rootScope', '$injector',
|
||||
*
|
||||
* @param {File} file
|
||||
* The file to upload.
|
||||
*
|
||||
* @param {ManagedFilesystem} [filesystem]
|
||||
* The filesystem to upload the file to, if any. If not specified, the
|
||||
* file will be sent as a generic Guacamole file stream.
|
||||
*
|
||||
* @param {ManagedFilesystem.File} [directory=filesystem.currentDirectory]
|
||||
* The directory within the given filesystem to upload the file to. If
|
||||
* not specified, but a filesystem is given, the current directory of
|
||||
* that filesystem will be used.
|
||||
*/
|
||||
ManagedClient.uploadFile = function uploadFile(managedClient, file) {
|
||||
managedClient.uploads.push(ManagedFileUpload.getInstance(managedClient.client, file));
|
||||
ManagedClient.uploadFile = function uploadFile(managedClient, file, filesystem, directory) {
|
||||
|
||||
// Use generic Guacamole file streams by default
|
||||
var object = null;
|
||||
var streamName = null;
|
||||
|
||||
// If a filesystem is given, determine the destination object and stream
|
||||
if (filesystem) {
|
||||
object = filesystem.object;
|
||||
streamName = (directory || filesystem.currentDirectory).streamName + '/' + file.name;
|
||||
}
|
||||
|
||||
// Start and manage file upload
|
||||
managedClient.uploads.push(ManagedFileUpload.getInstance(managedClient.client, file, object, streamName));
|
||||
|
||||
};
|
||||
|
||||
return ManagedClient;
|
||||
|
@@ -124,11 +124,19 @@ angular.module('client').factory('ManagedFileUpload', ['$rootScope', '$injector'
|
||||
* @param {File} file
|
||||
* The file to upload.
|
||||
*
|
||||
* @param {Object} [object]
|
||||
* The object to upload the file to, if any, such as a filesystem
|
||||
* object.
|
||||
*
|
||||
* @param {String} [streamName]
|
||||
* The name of the stream to upload the file to. If an object is given,
|
||||
* this must be specified.
|
||||
*
|
||||
* @return {ManagedFileUpload}
|
||||
* A new ManagedFileUpload object which can be used to track the
|
||||
* progress of the upload.
|
||||
*/
|
||||
ManagedFileUpload.getInstance = function getInstance(client, file) {
|
||||
ManagedFileUpload.getInstance = function getInstance(client, file, object, streamName) {
|
||||
|
||||
var managedFileUpload = new ManagedFileUpload();
|
||||
|
||||
@@ -137,7 +145,14 @@ angular.module('client').factory('ManagedFileUpload', ['$rootScope', '$injector'
|
||||
reader.onloadend = function fileContentsLoaded() {
|
||||
|
||||
// Open file for writing
|
||||
var stream = client.createFileStream(file.type, file.name);
|
||||
var stream;
|
||||
if (!object)
|
||||
stream = client.createFileStream(file.type, file.name);
|
||||
|
||||
// If object/streamName specified, upload to that instead of a file
|
||||
// stream
|
||||
else
|
||||
stream = object.createOutputStream(file.type, streamName);
|
||||
|
||||
var valid = true;
|
||||
var bytes = new Uint8Array(reader.result);
|
||||
|
Reference in New Issue
Block a user