10 Jul 2017
Forge SVF Extractor in Node.js
Extracting SVF format to download viewer resources locally seems to be a pretty popular topic among Forge developers. Cyrille's extractor has been around for a while now: https://extract.autodesk.io
You can look up its source code at https://github.com/cyrillef/extract.autodesk.io, more specifically the part of the server code that is performing the extraction is available there: bubble.js.
However when I tried to integrate that in my own application, I found it difficult to read and to decouple from some other dependencies in that project.
It took me a couple of days to work out the code below, so I hope you will find it useful: It's a clean rewrite of bubble.js in ES6, using promises and async code with no internal dependency to the project.
Here is an example of use:
// name of model to download
const name = 'MyForgeModel'
// URN of model to download
const urn = 'dXGhsujdj .... '
// Get Forge service
const forgeSvc = ServiceManager.getService(
'ForgeSvc')
// getToken async function
const getToken = () => forgeSvc.get2LeggedToken()
// Get Extractor service
const extractorSvc = ServiceManager.getService(
'ExtractorSvc')
// target path to download SVF
const dir = path.resolve(__dirname, `${name}`)
// perform download
const files = await extractorSvc.download(
getToken, urn, dir)
// target zipfile
const zipfile = dir + '.zip'
// zip all files
await extractorSvc.createZip(
dir, zipfile, name, files)
// remove downloaded resources directory
rmdir(dir)
You can also test that live in the gallery section of my sample at https://forge-rcdb.autodesk.io/gallery.
Upload your model and hit "Download SVF"