Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
Bedrock Mission!

Learn more

View all

Sign in to view all badges

Adobe Summit 2023 [19th to 23rd March, Las Vegas and Virtual] | Complete AEM Session & Lab list
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

2 Replies

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