Expand my Community achievements bar.

Submissions are now open for the 2026 Adobe Experience Maker Awards.
SOLVED

Correct API to create Asset in AEM programmatically as AssetManager.create is deprecated now

Avatar

Level 3

Hi All,

 

I am creating a CSV file in AEM for which I am using assetManager createAsset method but that is deprecated now.

What is the correct API to use instead?

 

https://experienceleague.adobe.com/docs/experience-manager-cloud-service/content/assets/admin/develo...

 

InputStream is = new ByteArrayInputStream(testData);
assetManager.createAsset(BASE_OUTPUT_FOLDER_PATH + "/"+ reportConfig.getReportFormBean().getReportName(), is,
"text/csv", true);

1 Accepted Solution

Avatar

Correct answer by
Level 3

Hi All,

 

I think I am good with question as I am now using createOrReplaceAsset method

 

createAsset method is not well suited with new architecture and have performance issues

In AEM as a Cloud Service, assets should instead take advantage of direct binary access. A discussion of this change as well as an SDK to ease implementation of this new pattern can be found at aem-upload.

 

Below is the updated code I am using

byte[] csvData = stream.toByteArray();
InputStream is = new ByteArrayInputStream(csvData);

final ValueFactory valueFactory = session.getValueFactory();
final Binary binary = valueFactory.createBinary(is);

Asset csv = assetManager.createOrReplaceAsset(
BASE_OUTPUT_FOLDER_PATH + "/" + reportConfig.getReportFormBean().getReportName(), binary, "text/csv",
true);

Thanks,

Shehjad

View solution in original post

3 Replies

Avatar

Level 4

Avatar

Correct answer by
Level 3

Hi All,

 

I think I am good with question as I am now using createOrReplaceAsset method

 

createAsset method is not well suited with new architecture and have performance issues

In AEM as a Cloud Service, assets should instead take advantage of direct binary access. A discussion of this change as well as an SDK to ease implementation of this new pattern can be found at aem-upload.

 

Below is the updated code I am using

byte[] csvData = stream.toByteArray();
InputStream is = new ByteArrayInputStream(csvData);

final ValueFactory valueFactory = session.getValueFactory();
final Binary binary = valueFactory.createBinary(is);

Asset csv = assetManager.createOrReplaceAsset(
BASE_OUTPUT_FOLDER_PATH + "/" + reportConfig.getReportFormBean().getReportName(), binary, "text/csv",
true);

Thanks,

Shehjad

Avatar

Level 1

createOrReplaceAsset is also deprecated with the latest Cloud Service version. What would be the new way to achieve this in a Java code?