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();
    }