It appears the best way to do this is to apply the java getSize() method to
the ff object, like this:
def ffSize = ff.getSize()

This seems to output the file size to the log in bytes.

def file_size = (ffSize != null) ? ffSize :0

if (file_size == 0) {
    log.error("file_size is undefined or zero, which prevents division.")
    session.transfer(ff, REL_FAILURE)
    return
}

log.info("File size: ${file_size}")

On Sat, Jun 15, 2024 at 10:43 PM James McMahon <jsmcmah...@gmail.com> wrote:

> It turns out you can access it in a Groovy script directly through ff, as
> ff.size. It appears to return a result in bytes.
>
> import org.apache.nifi.processor.ProcessContext
> import org.apache.nifi.processor.ProcessSession
> import org.apache.nifi.processor.io.InputStreamCallback
> import org.apache.nifi.flowfile.FlowFile
>
> def ff = session.get()
> if (!ff) return  // Exit if no flow file is available
>
> try {
>     // Retrieve and log all attributes
>     ff.getAttributes().each { key, value ->
>         log.info("Attribute: ${key} = ${value}")
>     }
>
>     // Log the fileSize system attribute
>     log.info("System Attribute - fileSize: ${ff.size}")
>
>     ff = session.putAttribute(ff, 'file_size', ff.size.toString())
>
>     // Transfer the flow file to the next stage in the flow
>     session.transfer(ff, REL_SUCCESS)
> } catch (Exception e) {
>     log.error("Error processing flow file", e)
>     session.transfer(ff, REL_FAILURE)
> }
>
> On Sat, Jun 15, 2024 at 5:14 PM James McMahon <jsmcmah...@gmail.com>
> wrote:
>
>> Hello. I am trying to determine a way to get the size of a NiFi flowfile
>> within a Groovy script. Has anyone done this before, and can tell me how to
>> do this from within Groovy?
>>
>> This
>> https://jameswing.net/nifi/nifi-internal-fields.html
>> describes fileSize as a hidden field that can be accessed via expression
>> language, but I do not see how I can reference that in a Groovy script.
>>
>> Thanks in advance for any help.
>>
>

Reply via email to