How to call apex class when a file is downloaded in Salesforce?

How to call apex class when a file is downloaded in Salesforce?

Use Sfc.ContentDownloadHandlerFactory interface to call apex class when a file is downloaded in Salesforce.

Sample Code:

public class ContentDownloadHandlerFactoryImpl implements Sfc.ContentDownloadHandlerFactory {

    public Sfc.ContentDownloadHandler getContentDownloadHandler( List<ID> listIds, Sfc.ContentDownloadContext context ) {
    
        Sfc.ContentDownloadHandler contentDownloadHandler = new Sfc.ContentDownloadHandler();
        
        /* To Prevent downloading it from Mobile */
        if ( context == Sfc.ContentDownloadContext.MOBILE ) {
        
            contentDownloadHandler.isDownloadAllowed = false;
            contentDownloadHandler.downloadErrorMessage = 'Downloading a file from a mobile device is not allowed.';
            return contentDownloadHandler;
        
        }
    
        contentDownloadHandler.isDownloadAllowed = true;
        return contentDownloadHandler;
    
    }

}

Note:

When a download is triggered either from the UI, Connect API, or an sObject call retrieving ContentVersion.VersionData, implementations of the Sfc.ContentDownloadHandlerFactory are looked up.

System.debug( 
	'Value is ' + 
	[ SELECT Id, VersionData 
	FROM ContentVersion 
	WHERE Id = '0684x00000377ZUAAY' ] 
); 

If the above code is executed, then also the apex class will be called.

But, if we use the below REST API Endpoint, then the apex class won’t be invoked.

/services/data/v51.0/sobjects/ContentVersion/0684x00000377ZUAAY

Reference Article – https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_salesforce_files_customize_downloads.htm

Leave a Reply