From 248b60208aece1ffd07148cb9b82002633bcaa38 Mon Sep 17 00:00:00 2001 From: DavidGrieve Date: Wed, 20 Jan 2016 15:45:04 +0000 Subject: [PATCH 1/3] push update --- routes/upload.js | 123 ++++++++++++++++++++++++++++++++++ server.js | 2 +- www/index.js | 2 +- www/upload-server.html | 57 ++++++++++++++++ www/upload-server.js | 91 ++++++++++++++++++++++++++ www/upload.html | 59 +++++++++++++++++ www/upload.js | 145 +++++++++++++++++++++++++++++++++++++++++ 7 files changed, 477 insertions(+), 2 deletions(-) create mode 100644 routes/upload.js create mode 100644 www/upload-server.html create mode 100644 www/upload-server.js create mode 100644 www/upload.html create mode 100644 www/upload.js diff --git a/routes/upload.js b/routes/upload.js new file mode 100644 index 0000000..05ddb3e --- /dev/null +++ b/routes/upload.js @@ -0,0 +1,123 @@ +ar express =require ('express') ; +var bodyParser =require ('body-parser') ; +var formidable = require('formidable') +var fs =require ('fs') ; +var async =require ('async') ; +var lmv =require ('./lmv.js') ; + +var router =express.Router () ; +router.use (bodyParser.json ()) ; + +router.post ('/file', function (req, res) { + /*req + .pipe (fs.createWriteStream ('data/' + req.headers ['x-file-name'])) + .on ('finish', function (err) { + res.json ({ 'name': req.headers ['x-file-name'] }) ; + }) + .on ('error', function (err) { + res.status (500).end () ; + }) + ;*/ + var filename ='' ; + + var form =new formidable.IncomingForm () ; + form.uploadDir ='data' ; + form + .on ('field', function (field, value) { + console.log (field, value) ; + }) + .on ('file', function (field, file) { + console.log (field, file) ; + fs.rename (file.path, form.uploadDir + '/' + file.name) ; + filename =file.name ; + }) + .on ('end', function () { + console.log ('-> upload done') ; + if ( filename == '' ) + res.status (500).end ('No file submitted!') ; + res.json ({ 'name': filename }) ; + }) + ; + form.parse(req); +}) ; + +router.post ('/translate', function (req, res) { + var filename ='data/' + req.body.name ; + var bucket = + 'model' + + new Date ().toISOString ().replace (/T/, '-').replace (/:+/g, '-').replace (/\..+/, '') + + '-' + lmv.Lmv.getToken ().toLowerCase ().replace (/\W+/g, '') ; + var policy ='transient' ; + + async.waterfall ([ + function (callbacks1) { + console.log ('createBucketIfNotExist') ; + new lmv.Lmv (bucket).createBucketIfNotExist (policy) + .on ('success', function (data) { + console.log ('Bucket already or now exist!') ; + callbacks1 (null, data) ; + }) + .on ('fail', function (err) { + console.log ('Failed to create bucket!') ; + callbacks1 (err) ; + }) + ; + }, + + function (arg1, callbacks2) { + console.log ('async upload') ; + new lmv.Lmv (bucket).uploadFile (filename) + .on ('success', function (data) { + console.log (filename + ' uploaded.') ; + callbacks2 (null, data) ; + }) + .on ('fail', function (err) { + console.log ('Failed to upload ' + filename + '!') ; + callbacks2 (err) ; + }) + ; + }, + + function (arg1, callbacks3) { + console.log ('Launching translation') ; + var urn =JSON.parse (arg1).objects [0].id ; + new lmv.Lmv (bucket).register (urn) + .on ('success', function (data) { + console.log ('Translation requested.') ; + callbacks3 (null, data) ; + }) + .on ('fail', function (err) { + console.log ('Failed to request translation!') ; + callbacks3 (err) ; + }) + ; + } + + ], function (err, results) { + if ( err != null ) { + if ( err.hasOwnProperty ('statusCode') && err.statusCode != 200 ) + return (res.status (err.statusCode).send (err.body.reason)) ; + if ( !err.raw_body.hasOwnProperty ('key') ) + return (res.status (500).send ('The server did not return a valid key')) ; + return (res.status (500).send ('An unknown error occurred!')) ; + } + + res.json (results) ; + }) ; + +}) ; + +router.get ('/translate/:urn/progress', function (req, res) { + var urn =req.params.urn ; + new lmv.Lmv ('').status (urn) + .on ('success', function (data) { + console.log (data.progress) ; + res.json (data) ; + }) + .on ('fail', function (err) { + res.status (404).end () ; + }) + ; +}) ; + +module.exports =router ; \ No newline at end of file diff --git a/server.js b/server.js index 989f4cf..57bd15d 100644 --- a/server.js +++ b/server.js @@ -29,4 +29,4 @@ app.set('port', process.env.PORT || 3000); var server = app.listen(app.get('port'), function() { console.log('Server listening on port ' + server.address().port); -}); +}); \ No newline at end of file diff --git a/www/index.js b/www/index.js index ae9639c..1c89cb3 100644 --- a/www/index.js +++ b/www/index.js @@ -15,7 +15,7 @@ // DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE // UNINTERRUPTED OR ERROR FREE. ///////////////////////////////////////////////////////////////////////////////// -var defaultUrn = ''; +var defaultUrn = 'dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6YmFsbGpvaW50L3B1bXAxQS5pcHQ'; $(document).ready(function () { var tokenurl = 'http://' + window.location.host + '/api/token'; diff --git a/www/upload-server.html b/www/upload-server.html new file mode 100644 index 0000000..5658ca3 --- /dev/null +++ b/www/upload-server.html @@ -0,0 +1,57 @@ + + + ADN Viewer Demo (server upload) + + + + + + + + + + + + +
+
+
+

Upload and translate a file

+
+
+ +
+ + +
+
+
+
+
+ +
+
+
+

My URNs

+
+
+
+
+ +
+ +
+ +
+ My URN list +
Click on a urn below to launch the viewer
+
+
+
+
+ + \ No newline at end of file diff --git a/www/upload-server.js b/www/upload-server.js new file mode 100644 index 0000000..ee78c82 --- /dev/null +++ b/www/upload-server.js @@ -0,0 +1,91 @@ +$(document).ready (function () { +}) ; +$(document).ready (function () { + + $('#btnTranslateThisOne').click (function (evt) { + var files =document.getElementById ('files').files ; + if ( files.length == 0 ) + return ; + + $.each (files, function (key, value) { + var data =new FormData () ; + data.append (key, value) ; + + $.ajax ({ + url: 'http://' + window.location.host + '/api/file', + type: 'post', + headers: { 'x-file-name': value.name }, + data: data, + cache: false, + //dataType: 'json', + processData: false, // Don't process the files + contentType: false, // Set content type to false as jQuery will tell the server its a query string request + complete: null + }).done (function (data) { + $('#msg').text (value.name + ' file uploaded on your server') ; + translate (data) ; + }).fail (function (xhr, ajaxOptions, thrownError) { + $('#msg').text (value.name + ' upload failed!') ; + }) ; + }) ; + + }) ; + + $('#btnAddThisOne').click (function (evt) { + var urn =$('#urn').val ().trim () ; + if ( urn == '' ) + return ; + AddThisOne (urn) ; + }) ; + +}) ; + +function AddThisOne (urn) { + var id =urn.replace (/=+/g, '') ; + $('#list').append ('
' + + '' + + '
' + ) ; + $('#' + id).click (function (evt) { + window.open ('/?urn=' + $(this).text (), '_blank') ; + }) ; +} + +function translate (data) { + $('#msg').text (data.name + ' translation request...') ; + $.ajax ({ + url: '/api/translate', + type: 'post', + data: JSON.stringify (data), + timeout: 0, + contentType: 'application/json', + complete: null + }).done (function (response) { + $('#msg').text (data.name + ' translation requested...') ; + setTimeout (function () { translateProgress (response.urn) ; }, 5000) ; + }).fail (function (xhr, ajaxOptions, thrownError) { + $('#msg').text (data.name + ' translation request failed!') ; + }) ; +} + +function translateProgress (urn) { + $.ajax ({ + url: '/api/translate/' + urn + '/progress', + type: 'get', + data: null, + contentType: 'application/json', + complete: null + }).done (function (response) { + if ( response.progress == 'complete' ) { + AddThisOne (response.urn) ; + $('#msg').text ('') ; + } else { + var name =window.atob (urn) ; + var filename =name.replace (/^.*[\\\/]/, '') ; + $('#msg').text (filename + ': ' + response.progress) ; + setTimeout (function () { translateProgress (urn) ; }, 500) ; + } + }).fail (function (xhr, ajaxOptions, thrownError) { + $('#msg').text ('Progress request failed!') ; + }) ; +} \ No newline at end of file diff --git a/www/upload.html b/www/upload.html new file mode 100644 index 0000000..b27ef9f --- /dev/null +++ b/www/upload.html @@ -0,0 +1,59 @@ + + + ADN Viewer Demo (client upload) + + + + + + + + + + + + + + +
+
+
+

Upload and translate a file

+
+
+ +
+ + +
+
+
+
+
+ +
+
+
+

My URNs

+
+
+
+
+ +
+ +
+ +
+ My URN list +
Click on a urn below to launch the viewer
+
+
+
+
+ + \ No newline at end of file diff --git a/www/upload.js b/www/upload.js new file mode 100644 index 0000000..6402466 --- /dev/null +++ b/www/upload.js @@ -0,0 +1,145 @@ +var oViewDataClient =null ; + +$(document).ready (function () { + oViewDataClient =new Autodesk.ADN.Toolkit.ViewData.AdnViewDataClient ( + 'https://developer.api.autodesk.com', + 'http://' + window.location.host + '/api/token' + ) ; +}) ; +var oViewDataClient =null ; + +$(document).ready (function () { + oViewDataClient =new Autodesk.ADN.Toolkit.ViewData.AdnViewDataClient ( + 'https://developer.api.autodesk.com', + 'http://' + window.location.host + '/api/token' + ) ; + + $('#btnTranslateThisOne').click (function (evt) { + var files =document.getElementById('files').files ; + if ( files.length == 0 ) + return ; + var bucket = + 'model' + + new Date ().toISOString ().replace (/T/, '-').replace (/:+/g, '-').replace (/\..+/, '') + + '-' + 'abAXdBGtQCUdptvG6bbC5AKCX9QFZmVY'.toLowerCase ().replace (/\W+/g, '') ; + + createBucket (bucket, files) + }) ; + + $('#btnAddThisOne').click (function (evt) { + var urn =$('#urn').val ().trim () ; + if ( urn == '' ) + return ; + AddThisOne (urn) ; + }) ; +}) ; + +function AddThisOne (urn) { + var id =urn.replace (/=+/g, '') ; + $('#list').append ('
' + + '' + + '
' + ) ; + $('#' + id).click (function (evt) { + window.open ('/?urn=' + $(this).text (), '_blank') ; + }) ; +} + +function createBucket (bucket, files) { + var bucketData ={ + bucketKey: bucket, + servicesAllowed: {}, + policy: 'transient' + } ; + oViewDataClient.createBucketAsync ( + bucketData, + //onSuccess + function (response) { + console.log ('Bucket creation successful:') ; + console.log (response) ; + $('#msg').text ('Bucket creation successful') ; + uploadFiles (response.key, files) ; + }, + //onError + function (error) { + console.log ('Bucket creation failed:'); + console.log (error) ; + $('#msg').text ('Bucket creation failed!') ; + } + ) ; +} + +function uploadFiles (bucket, files) { + for ( var i =0 ; i < files.length ; i++ ) { + var file =files [i] ; + //var filename =file.replace (/^.*[\\\/]/, '') ; + console.log ('Uploading file: ' + file.name + ' ...') ; + $('#msg').text ('Uploading file: ' + file.name + ' ...') ; + oViewDataClient.uploadFileAsync ( + file, + bucket, + file.name, + //onSuccess + function (response) { + console.log ('File was uploaded successfully:') ; + console.log (response) ; + $('#msg').text ('File was uploaded successfully') ; + var fileId =response.objects [0].id ; + var registerResponse =oViewDataClient.register (fileId) ; + if ( registerResponse.Result === "Success" + || registerResponse.Result === "Created" + ) { + console.log ("Registration result: " + registerResponse.Result) ; + console.log ('Starting translation: ' + fileId) ; + $('#msg').text ('Your model was uploaded successfully. Translation starting...') ; + checkTranslationStatus ( + fileId, + 1000 * 60 * 5, // 5 mins timeout + //onSuccess + function (viewable) { + console.log ("Translation was successful: " + response.file.name) ; + console.log ("Viewable: ") ; + console.log (viewable) ; + $('#msg').text ('Translation was successful: ' + response.file.name + '.') ; + //var fileId =oViewDataClient.fromBase64 (viewable.urn) ; + AddThisOne (viewable.urn) ; + } + ) ; + } + }, + //onError + function (error) { + console.log ('File upload failed:') ; + console.log (error) ; + $('#msg').text ('File upload failed!') ; + } + ) ; + } +} + +function checkTranslationStatus (fileId, timeout, onSuccess) { + var startTime =new Date ().getTime () ; + var timer =setInterval (function () { + var dt =(new Date ().getTime () - startTime) / timeout ; + if ( dt >= 1.0 ) { + clearInterval (timer) ; + } else { + oViewDataClient.getViewableAsync ( + fileId, + function (response) { + var msg ='Translation Progress ' + fileId + ': ' + response.progress ; + console.log (msg) ; + $('#msg').text (msg) ; + if ( response.progress === 'complete' ) { + clearInterval (timer) ; + onSuccess (response) ; + } + }, + function (error) { + } + ) ; + } + }, + 2000 + ) ; +} \ No newline at end of file From bd128b25a5f6ce60bfb744b3da7b6c890b57cbb8 Mon Sep 17 00:00:00 2001 From: DavidGrieve Date: Wed, 20 Jan 2016 15:52:28 +0000 Subject: [PATCH 2/3] Deleting files --- www/upload-server.html | 57 -------------------------- www/upload-server.js | 91 ------------------------------------------ 2 files changed, 148 deletions(-) delete mode 100644 www/upload-server.html delete mode 100644 www/upload-server.js diff --git a/www/upload-server.html b/www/upload-server.html deleted file mode 100644 index 5658ca3..0000000 --- a/www/upload-server.html +++ /dev/null @@ -1,57 +0,0 @@ - - - ADN Viewer Demo (server upload) - - - - - - - - - - - - -
-
-
-

Upload and translate a file

-
-
- -
- - -
-
-
-
-
- -
-
-
-

My URNs

-
-
-
-
- -
- -
- -
- My URN list -
Click on a urn below to launch the viewer
-
-
-
-
- - \ No newline at end of file diff --git a/www/upload-server.js b/www/upload-server.js deleted file mode 100644 index ee78c82..0000000 --- a/www/upload-server.js +++ /dev/null @@ -1,91 +0,0 @@ -$(document).ready (function () { -}) ; -$(document).ready (function () { - - $('#btnTranslateThisOne').click (function (evt) { - var files =document.getElementById ('files').files ; - if ( files.length == 0 ) - return ; - - $.each (files, function (key, value) { - var data =new FormData () ; - data.append (key, value) ; - - $.ajax ({ - url: 'http://' + window.location.host + '/api/file', - type: 'post', - headers: { 'x-file-name': value.name }, - data: data, - cache: false, - //dataType: 'json', - processData: false, // Don't process the files - contentType: false, // Set content type to false as jQuery will tell the server its a query string request - complete: null - }).done (function (data) { - $('#msg').text (value.name + ' file uploaded on your server') ; - translate (data) ; - }).fail (function (xhr, ajaxOptions, thrownError) { - $('#msg').text (value.name + ' upload failed!') ; - }) ; - }) ; - - }) ; - - $('#btnAddThisOne').click (function (evt) { - var urn =$('#urn').val ().trim () ; - if ( urn == '' ) - return ; - AddThisOne (urn) ; - }) ; - -}) ; - -function AddThisOne (urn) { - var id =urn.replace (/=+/g, '') ; - $('#list').append ('
' - + '' - + '
' - ) ; - $('#' + id).click (function (evt) { - window.open ('/?urn=' + $(this).text (), '_blank') ; - }) ; -} - -function translate (data) { - $('#msg').text (data.name + ' translation request...') ; - $.ajax ({ - url: '/api/translate', - type: 'post', - data: JSON.stringify (data), - timeout: 0, - contentType: 'application/json', - complete: null - }).done (function (response) { - $('#msg').text (data.name + ' translation requested...') ; - setTimeout (function () { translateProgress (response.urn) ; }, 5000) ; - }).fail (function (xhr, ajaxOptions, thrownError) { - $('#msg').text (data.name + ' translation request failed!') ; - }) ; -} - -function translateProgress (urn) { - $.ajax ({ - url: '/api/translate/' + urn + '/progress', - type: 'get', - data: null, - contentType: 'application/json', - complete: null - }).done (function (response) { - if ( response.progress == 'complete' ) { - AddThisOne (response.urn) ; - $('#msg').text ('') ; - } else { - var name =window.atob (urn) ; - var filename =name.replace (/^.*[\\\/]/, '') ; - $('#msg').text (filename + ': ' + response.progress) ; - setTimeout (function () { translateProgress (urn) ; }, 500) ; - } - }).fail (function (xhr, ajaxOptions, thrownError) { - $('#msg').text ('Progress request failed!') ; - }) ; -} \ No newline at end of file From f71ceb1046f80982314c4d8a2eb5846c6990d22b Mon Sep 17 00:00:00 2001 From: DavidGrieve Date: Wed, 20 Jan 2016 16:33:50 +0000 Subject: [PATCH 3/3] Removing routes\upload.js --- routes/upload.js | 123 ----------------------------------------------- 1 file changed, 123 deletions(-) delete mode 100644 routes/upload.js diff --git a/routes/upload.js b/routes/upload.js deleted file mode 100644 index 05ddb3e..0000000 --- a/routes/upload.js +++ /dev/null @@ -1,123 +0,0 @@ -ar express =require ('express') ; -var bodyParser =require ('body-parser') ; -var formidable = require('formidable') -var fs =require ('fs') ; -var async =require ('async') ; -var lmv =require ('./lmv.js') ; - -var router =express.Router () ; -router.use (bodyParser.json ()) ; - -router.post ('/file', function (req, res) { - /*req - .pipe (fs.createWriteStream ('data/' + req.headers ['x-file-name'])) - .on ('finish', function (err) { - res.json ({ 'name': req.headers ['x-file-name'] }) ; - }) - .on ('error', function (err) { - res.status (500).end () ; - }) - ;*/ - var filename ='' ; - - var form =new formidable.IncomingForm () ; - form.uploadDir ='data' ; - form - .on ('field', function (field, value) { - console.log (field, value) ; - }) - .on ('file', function (field, file) { - console.log (field, file) ; - fs.rename (file.path, form.uploadDir + '/' + file.name) ; - filename =file.name ; - }) - .on ('end', function () { - console.log ('-> upload done') ; - if ( filename == '' ) - res.status (500).end ('No file submitted!') ; - res.json ({ 'name': filename }) ; - }) - ; - form.parse(req); -}) ; - -router.post ('/translate', function (req, res) { - var filename ='data/' + req.body.name ; - var bucket = - 'model' - + new Date ().toISOString ().replace (/T/, '-').replace (/:+/g, '-').replace (/\..+/, '') - + '-' + lmv.Lmv.getToken ().toLowerCase ().replace (/\W+/g, '') ; - var policy ='transient' ; - - async.waterfall ([ - function (callbacks1) { - console.log ('createBucketIfNotExist') ; - new lmv.Lmv (bucket).createBucketIfNotExist (policy) - .on ('success', function (data) { - console.log ('Bucket already or now exist!') ; - callbacks1 (null, data) ; - }) - .on ('fail', function (err) { - console.log ('Failed to create bucket!') ; - callbacks1 (err) ; - }) - ; - }, - - function (arg1, callbacks2) { - console.log ('async upload') ; - new lmv.Lmv (bucket).uploadFile (filename) - .on ('success', function (data) { - console.log (filename + ' uploaded.') ; - callbacks2 (null, data) ; - }) - .on ('fail', function (err) { - console.log ('Failed to upload ' + filename + '!') ; - callbacks2 (err) ; - }) - ; - }, - - function (arg1, callbacks3) { - console.log ('Launching translation') ; - var urn =JSON.parse (arg1).objects [0].id ; - new lmv.Lmv (bucket).register (urn) - .on ('success', function (data) { - console.log ('Translation requested.') ; - callbacks3 (null, data) ; - }) - .on ('fail', function (err) { - console.log ('Failed to request translation!') ; - callbacks3 (err) ; - }) - ; - } - - ], function (err, results) { - if ( err != null ) { - if ( err.hasOwnProperty ('statusCode') && err.statusCode != 200 ) - return (res.status (err.statusCode).send (err.body.reason)) ; - if ( !err.raw_body.hasOwnProperty ('key') ) - return (res.status (500).send ('The server did not return a valid key')) ; - return (res.status (500).send ('An unknown error occurred!')) ; - } - - res.json (results) ; - }) ; - -}) ; - -router.get ('/translate/:urn/progress', function (req, res) { - var urn =req.params.urn ; - new lmv.Lmv ('').status (urn) - .on ('success', function (data) { - console.log (data.progress) ; - res.json (data) ; - }) - .on ('fail', function (err) { - res.status (404).end () ; - }) - ; -}) ; - -module.exports =router ; \ No newline at end of file