cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
Showing results for 
Search instead for 
Did you mean: 

Scripto Example: Retrieve an asset-uploaded file

Highlighted
Marble

Scripto Example: Retrieve an asset-uploaded file

This example shows how a file can be retrieved via Scripto and then displayed on a Web page. Precondition is that an asset has an uploaded file. This script assumes the file is there and that it is not extremely large (under 1 megabyte). This example uses base64 encoding to convert the file into a string. Future versions of Scripto will support other data streams so that base64 encoding will not be necessary.

import com.axeda.drm.sdk.Context

import com.axeda.drm.sdk.data.UploadedFile

import com.axeda.drm.sdk.data.UploadedFileFinder

import com.axeda.drm.sdk.device.Device

import com.axeda.drm.sdk.device.DeviceFinder

// This script requires parameter "id"

Context ctx = Context.create(parameters.username);

def response = ''

try {

    DeviceFinder deviceFinder = new DeviceFinder(ctx, new Identifier(parameters.id as Integer));

    Device device = deviceFinder.find();

    UploadedFileFinder uff = new UploadedFileFinder(ctx)

    uff.device = device

    uff.hint = 'photo'

    def ufiles = uff.findAll()

    UploadedFile ufile

    if (ufiles.size() > 0) {

        ufile = ufiles[0]

        File f = ufile.extractFile()

        response = getBytes(f).encodeBase64(false).toString()

    }

}

catch (Exception e) {

    logger.info(e.message);

    response = [

            faultcode: 'Groovy Exception',

            faultstring: e.message

    ];

}

return ['Content-Type': 'data:image/png;base64', 'Content': response];

static byte[] getBytes(File file) throws IOException {

    return getBytes(new FileInputStream(file));

}

static byte[] getBytes(InputStream is) throws IOException {

    ByteArrayOutputStream answer = new ByteArrayOutputStream();

// reading the content of the file within a byte buffer

    byte[] byteBuffer = new byte[8192];

    int nbByteRead /* = 0*/;

    try {

        while ((nbByteRead = is.read(byteBuffer)) != -1) {

// appends buffer

            answer.write(byteBuffer, 0, nbByteRead);

        }

    } finally {

        is.close()

    }

    return answer.toByteArray();

}

Tags (2)