It has a module class (info.magnolia.dam.core.config.DamCoreConfiguration) that implements info.magnolia.module.ModuleLifecycle.
It contains (and registers) info.magnolia.dam.core.download.DamDownloadServlet and provides an implementation of info.magnolia.dam.api.AssetProviderRegistry.
The module is configured in /modules/dam/config.
Installing with Maven
Bundled modules are automatically installed for you.
If the module is unbundled, add the following to your bundle including your project’s <dependencyManagement> section and your webapp’s <dependencies> section.
If the module is unbundled but the parent POM manages the version, add the following to your webapp’s <dependencies> section.
Should you need to specify the module version, do it using <version>.
Asset providers and renderers
In order to have a working DAM, you must have configured at least:
info.magnolia.dam.api.AssetProvider
info.magnolia.dam.api.AssetRenderer
Configuring an asset provider
To enable DAM, at least one asset provider must be configured as a subnode of /modules/dam/config/providers/.
Property
Description
class
required
A class that must implement info.magnolia.dam.api.AssetProvider.
identifier
required
The identifier of the asset provider. Must be unique within all asset providers.
enabled
optional, default is true
Allows you to disable the provider if, for instance, it does not
have the necessary credentials to access the assets.
Setting the property to false hides the related DAM subapp in the UI and prevents it from starting.
Configuring an asset renderer
info.magnolia.dam.api.AssetRenderer objects can be configured:
Globally
Per AssetProvider
When an asset rendition is requested, AssetProviderRegistry#getRendererFor(Asset asset, MediaType to) is first looking for a provider-specific renderer but will fallback to the globally defined renderer if no specific provider is found.
The example configuration above has two renderers defined:
/modules/dam/config/providers/example-provider/renderers/imaging - configures a renderer for images specifically for the example-provider.
/modules/dam/config/renderers/noOp - a global fallback if a provider lacks a renderer for the requested media type.
NoOpAssetRenderer
The magnolia-dam-core module provides info.magnolia.dam.core.NoOpAssetRenderer, which can be used to define a global asset renderer. By default, the NoOpAssetRenderer only wraps the original asset.
magnolia-dam-core is not taking care about the asset provider implementation used.
Specific asset provider and renderer should rather be configured from a module which contains a specific implementation but not from the magnolia-dam-core itself.
Download servlet
info.magnolia.dam.core.download.DamDownloadServlet handles
asset downloads. The main task
is to retrieve an Asset Object based on the current URI:
If no Asset is found, an error is sent to the response.
If an Asset is found, the response header is set and the asset binary is put in the response.
The servlet is backwards compatible and maps static UUIDs to the new DAM format.
DamDownloadServlet is registered in the filter chain at /server/filters/servlets/DamDownloadServlet.
Content disposition
Content-disposition is a HTTP header.
If the Content-disposition field is set in a HTTP response header, the browser opens the save file as dialog instead of rendering the requested resource.
By default, the DamDownloadServlet serves assets whose Content-Disposition header is set. However, it is possible to define exceptions to omit the content disposition header.
Disabling content disposition headers per media (MIME) type
The standard DAM configuration already defines two exceptions based on media types:
application/x-shockwave-flash
video/mp4
To disable the Content-Disposition header for other content types, add
their media types to /dam/config/contentDisposition/contentType/rejected.
rejected: Content map of MIME types for which content disposition
headers are not served.
class:
info.magnolia.voting.voters.ResponseContentTypeVoter is a Voters that checks the content type set on the response object against a list of allowed and/or rejected content types. It is typed to Object, as it can vote on both a passed HttpServletRequest, or the current MgnlContext.webContext, if any.
class: info.magnolia.voting.voters.VoterSet supports
a set of voters. Voting can be set, and a level returned. If the level is not set (0), the voting result is returned.
Disabling content disposition headers based on path
To disable serving Content-Disposition headers based on path:
Create a new node inline under contentDisposition.
Under the new content node, create three property nodes:
class and set the value to
info.magnolia.voting.voters.URIStartsWithVoter.
not and set the value to true.
pattern and set the value to /dam/inline.
Under the contentDisposition node, add the op property and set its value to and. This acts as an operator between voters and is only necessary if there are more than one voter in the set.
This will configure all files in the inline folder to be sent without content disposition headers. The new content node should look like this: