PackagePackagetypeA library you install and call yourself.See every one →What this type is →by SAPby SAPoriginPublished by SAP itself. A visible facet, never an input to a reading — a dormant official plugin reads exactly like a dormant independent one.See every one →

com.sap.cds:cds-feature-attachments

A CAP Java attachments package that adds an Attachments aspect and stores content in the database by default, or in AWS, Azure or Google Object Store through a separate module.

Adds attachment storage and handling to CAP Java through an Attachments aspect. The base Maven dependency stores content in the database; com.sap.cds:cds-feature-attachments-oss selects AWS, Azure or Google Object Store storage. UI integration uses CDS annotations.

Facts

Last pushLicenceApache-2.0

Where it sits

Lives in
Provides
AttachmentsCAPAttachmentscapabilityStoring a file somebody uploaded next to the record it belongs to, and getting it back out — where the bytes actually live, who may read them, and what the UI shows while they are being scanned.
Flavors
Optional
Object Store on SAP BTPObject Store on SAP BTPartifactThe cds-feature-attachments-oss module is selected.SAP Malware Scanning serviceSAP Malware Scanning serviceartifactActual malware scanning is needed.

Who is behind it

CAPCAPOrganisationMaintains this
In the atlas: maintains 10
@cap-java
maintainerAndré AdamPersonContributes to this
In the atlas: contributes to 2
@adamandre79
BraunMatthiasPersonContributes to this
In the atlas: contributes to 8
@BraunMatthias
busehalis-sapPersonContributes to this
In the atlas: contributes to 2
@busehalis-sap
Simon KoblerPersonContributes to this
In the atlas: contributes to 6
@KoblerS
Lisa Julia NebelPersonContributes to this
In the atlas: contributes to 15
@lisajulia
Markus OfterdingerPersonContributes to this
In the atlas: contributes to 6
@mofterdinger
René JeglinskyPersonContributes to this
In the atlas: contributes to 20
@renejeglinsky
Samyuktha PrabhuPersonContributes to this
In the atlas: contributes to 4
@samyuktaprabhu
Marvin LPersonContributes to this
In the atlas: contributes to 7
@Schmarvinius
9 contributors

Before choosing this

Conditions

PracticalFunctional boundary

For deployed environments, the README excludes the cds-feature-attachments-fs file-system target, which is intended only for local development and testing.

What it declares

Every artifact

Type
Package
Origin
By SAP
Runtime
Java

As a package

Where it runs
does not say
Distributed through
Maven

For attachments

Storage target
Database by default; OSS module for AWS, Azure and Google
Scan behaviour
No scanner available: attachments automatically marked Clean

Tasks this contributes to5Beta

Keep attachment content out of the application databaseA deployed CAP application keeps uploaded file content in an object store or a document repository, and keeps only the metadata and a reference in its own database.Node.js, JavaCovers, under conditionsstorage
What it does

The base dependency stores attachments in the database. A separate module, cds-feature-attachments-oss, puts them in an AWS, Azure or Google object store instead and keeps only a reference in the database.

Conditions

The cds-feature-attachments-oss module is used as the storage target module.; A valid Object Store service binding exists for the application.

Remaining work

Add the oss module and provision the binding. The base dependency alone leaves the content in the database, which is the state this task is trying to leave.

All options on the Attachments page →
Keep each subscriber's attachments apart in a multitenant CAP applicationEach subscriber of a multitenant CAP application uploads and reads only its own attachments, and that tenant's content is removed when it unsubscribes.Node.js, JavaCovers, under conditionstenant separation
What it does

With an object store as the storage target, one bucket serves every tenant, keys are prefixed with the tenant id and a tenant's data is cleaned up on unsubscribe. With SAP HANA as the target the README puts multitenancy on the consuming application.

Conditions

An object store is the storage target, and the package is at version 1.5.0 or later.; With SAP HANA as the storage target, multitenancy support depends on the consuming application.

Remaining work

On the SAP HANA target the application provides the isolation itself, and the README names a schema per tenant as the usual arrangement without specifying what the package does about it.

All options on the Attachments page →
Keep version history for an attached documentA document attached to a business record keeps its earlier versions, so a reader can see what the file was before it was replaced.Node.js, JavaAssessed, not knownattachment handling
What it does

The pinned README documents storage targets, the scanner and multitenancy. Re-read on 2026-09-20, it states nothing about replacing the content of an existing attachment and nothing about earlier versions, so the Node.js answer cannot be carried across.

Remaining work

Establish what happens to the previous content on replacement, from the plugin's model or the CAP Java documentation.

All options on the Attachments page →
Scan an uploaded attachment before anyone can download itA file a user uploads is scanned for malware, and a file that was never scanned does not reach a reader carrying the same status as one that was.Node.js, JavaCoversscanning
What it does

Download is tied to the status here too: only an attachment marked Clean is accessible. With no scanner available the attachments are marked Clean automatically, so a file nobody scanned reaches a reader through the same gate as a scanned one.

Remaining work

Bind a service instance labelled malware-scanner. Until then a Clean status says nothing about the file, which is the fact this flavor has to be checked for.

All options on the Attachments page →
Upload an attachment from a client that is not SAP Fiori elementsA caller that is not an SAP Fiori elements UI, such as a test client, a custom front end or another service, creates an attachment record against an existing business record and uploads its content.Node.js, JavaAssessed, not knownattachment handling
What it does

The pinned README documents storage targets, the malware scanner and multitenancy. Re-read on 2026-09-20, it names no draft annotation, no DraftService and no request sequence, so what a caller outside SAP Fiori elements has to send is not stated. Absence of a statement is not a refusal.

Remaining work

Retrieve the CAP Java attachments documentation on capire and the plugin's own draft handling before this flavor can be answered.

All options on the Attachments page →

Connections5

com.sap.cds:cds-feature-attachments connectionscom.sap.cds:cds-feature-attachmentsPROVIDES→ provides1provides stated Adds attachment storage and handling to CAP Java through an Attachments aspect. The base Maven dependency stores content in the database; com.sap.cds:cds-feature-attachments-oss selects AWS, Azure or Google Object Store storage. cap-java/cds-feature-attachments — README: https://raw.githubusercontent.com/cap-java/cds-feature-attachments/302f61c8bb76a0f54f43482ad91d89bf7dc5540f/README.md cap-java/cds-feature-attachments — README: https://raw.githubusercontent.com/cap-java/cds-feature-attachments/302f61c8bb76a0f54f43482ad91d89bf7dc5540f/README.md cap-java/cds-feature-attachments — README: https://raw.githubusercontent.com/cap-java/cds-feature-attachments/302f61c8bb76a0f54f43482ad91d89bf7dc5540f/README.mdAttachmentsNEEDS→ connects to2connects to stated If: The cds-feature-attachments-oss module is selected. Keeping attachment content in an object store on AWS, Azure or Google, through the plugin's object store storage target. cds-feature-attachments — README: https://raw.githubusercontent.com/cap-java/cds-feature-attachments/c2f5e821ad5ca9c7715ef23d0eb0c70ea1db9b76/README.md cap-java/cds-feature-attachments — README, Storage Targets: https://raw.githubusercontent.com/cap-java/cds-feature-attachments/c2f5e821ad5ca9c7715ef23d0eb0c70ea1db9b76/README.mdObject Store on SAP BTPifconnects to stated If: A service binding with the label `malware-scanner` exists. Scanning attachments where the application is bound to the SAP Malware Scanning Service under the label `malware-scanner`. cds-feature-attachments — README, Malware Scanner: https://raw.githubusercontent.com/cap-java/cds-feature-attachments/c2f5e821ad5ca9c7715ef23d0eb0c70ea1db9b76/README.mdSAP Malware Scanning serviceif→ optionally needs2optionally needs stated If: The cds-feature-attachments-oss module is selected. CAP Java attachments — Object Store module: https://raw.githubusercontent.com/cap-java/cds-feature-attachments/302f61c8bb76a0f54f43482ad91d89bf7dc5540f/storage-targets/cds-feature-attachments-oss/README.mdObject Store on SAP BTPifoptionally needs stated If: Actual malware scanning is needed. cap-java/cds-feature-attachments — README: https://raw.githubusercontent.com/cap-java/cds-feature-attachments/302f61c8bb76a0f54f43482ad91d89bf7dc5540f/README.mdSAP Malware Scanning serviceif

Learn more1

Readings
  1. Major updates to the Attachments plugin – multi-cloud support, malware scanning and morerupamaity, SAP Community

Where it sits in your app

Download
Your CAP applicationYour SAP BTP subaccountcds-feature-attachments — README, Malware Scanner, checked 2026-09-19: “This plugin checks for a binding to the [SAP Malware Scanning Service](https://help.sap.com/docs/malware-scanning-servce), which needs to have the label `malware-scanner`.”connectsif A service binding with thelabel `malware-scanner` existscds-feature-attachments — README, checked 2026-09-19: “It supports the [AWS, Azure, and Google object stores](storage-targets/cds-feature-attachments-oss) and can connect to a [malware scanner](#malware-scanner).”connectsif Thecds-feature-attachments-ossmodule is selectedcom.sap.cds:cds-feature-attachments, modulecom.sap.cds:cds-feat…Object Store on SAP BTP, service instanceObject Store onSAP BTPSAP Malware Scanning service, service instanceSAP MalwareScanning service
SAPnot SAP's, or the project's ownstated in the document

README

quoted from cap-java/cds-feature-attachments under Apache-2.0, read
cap-java/cds-feature-attachments/README.mdOn GitHub

Java Build with Maven Deploy new Version with Maven REUSE status

Attachments Plugin for SAP Cloud Application Programming Model (CAP)

The com.sap.cds:cds-feature-attachments dependency is a CAP Java plugin that provides out-of-the box attachments storage and handling by using an aspect Attachments.

It supports the AWS, Azure, and Google object stores and can connect to a malware scanner.

Table of Contents

Quick Start

For a quick setup with in-memory storage:

  • Add the cds-feature-attachments Maven dependency to the srv/pom.xml and configure the cds-maven-plugin with the resolve goal as described in MVN Setup.
  • Extend the CDS model with the Attachments aspect and annotate the service for UI integration as explained in Changes in the CDS Models and for the UI.

For a complete working example, see the bookshop sample.

The incidents app provides a demonstration of how to use this plugin.

For object store integration, see Amazon, Azure, and Google Object Stores.

Usage

MVN Setup

As described in the CAP Java Documentation, the attachments plugin needs to be referenced in the srv/pom.xml of the consuming CAP Java application:

<dependency>
    <groupId>com.sap.cds</groupId>
    <artifactId>cds-feature-attachments</artifactId>
    <version>${latest-version}</version>
</dependency>

Additionally, the cds-maven-plugin must be configured with the resolve goal to ensure CDS models from dependencies are available. For this, add the following to the srv/pom.xml before the entry build as well:

<plugin>
    <groupId>com.sap.cds</groupId>
    <artifactId>cds-maven-plugin</artifactId>
    <version>${cds.services.version}</version>
    <executions>
        <execution>
            <id>cds.resolve</id>
            <goals>
                <goal>resolve</goal>
            </goals>
        </execution>
    </executions>
</plugin>

After that, the aspect Attachments can be used in the application's CDS model.

Changes in the CDS Models and for the UI

To use the aspect Attachments on an existing entity, the corresponding entity needs to be extended in a CDS file in the srv module. The following example shows how to extend the entity Incidents in the srv module with an additional attachments.cds file, it also directly adds the respective UI Facet. To use this file with the incidents app, check out the source code, copy the file from the xmpls folder to the srv folder and run the app as explained in the incidents app README.

using { sap.capire.incidents as my } from '../db/schema';
using { Attachments } from 'com.sap.cds/cds-feature-attachments';
extend my.Incidents with {
  attachments: Composition of many Attachments;
}
using { ProcessorService as service } from '../app/services';
annotate service.Incidents with @(
  UI.Facets: [
    ...,
    {
      $Type  : 'UI.ReferenceFacet',
      ID     : 'AttachmentsFacet',
      Label  : '{i18n>attachments}',
      Target : 'attachments/@UI.LineItem'
    }
  ]
);

The UI Facet can also be added directly after other UI Facets in a cds file in the app folder.

Single (Inline) Attachments

[!Important] Inline attachments are available from cds-feature-attachments 1.7.0.

In addition to the composition-based Attachments aspect (which supports multiple files), cds-feature-attachments provides the Attachment type for single-file attachment fields directly on an entity. This is useful when an entity needs exactly one file, for example a profile icon or a cover image.

using { Attachment } from 'com.sap.cds/cds-feature-attachments';

entity Books {
  key ID   : UUID;
  title    : String;
  profileIcon : Attachment;
  coverImage  : Attachment;
}

CDS flattens inline attachment fields onto the parent entity. For example, profileIcon : Attachment generates the following columns on the Books table:

  • profileIcon_content (LargeBinary)
  • profileIcon_mimeType (String)
  • profileIcon_fileName (String)
  • profileIcon_contentId (String)
  • profileIcon_status (StatusCode)
  • profileIcon_scannedAt (Timestamp)
  • profileIcon_note (String)

All plugin features: malware scanning, storage targets, maximum file size, and MIME type validation work the same way for inline attachments as for composition-based attachments.

UI Annotations for Inline Attachments

To display inline attachments in a Fiori Elements UI, use a FieldGroup referencing the flattened field names:

annotate AdminService.Books with @(UI: {
  Facets: [
    // ... other facets ...
    {
      $Type : 'UI.ReferenceFacet',
      Label : 'Profile Icon',
      Target: '@UI.FieldGroup#ProfileIcon'
    }
  ],
  FieldGroup #ProfileIcon: {Data: [
    {Value: profileIcon_content},
    {Value: profileIcon_status}
  ]}
});
Storage Targets

By default, the plugin operates without a dedicated storage target, storing attachments directly in the underlying database.

Other available storage targets:

Warning: The file system storage target (cds-feature-attachments-fs) is intended only for local development and testing purposes. It is not suitable for production or deployed environments. For production use, configure one of the supported object stores (AWS, Azure, or Google).

When using a dedicated storage target, the attachment is not stored in the underlying database; instead, it is saved on the specified storage target and only a reference to the file is kept in the database, as defined in the CDS model.

Malware Scanner

This plugin checks for a binding to the SAP Malware Scanning Service, which needs to have the label malware-scanner. The entry in the mta-file may look like:

_schema-version: '0.1'
ID: consuming-app
version: 1.0.0
description: "App consuming the attachments plugin with a malware scanner"
parameters:
  ...
modules:
  - name: consuming-app-srv
# ------------------------------------------------------------
    type: java
    path: srv
    parameters:
      ...
    properties:
      ...
    build-parameters:
      ...
    requires:
      - name: consuming-app-hdi-container
      - name: consuming-app-uaa
      - name: cf-logging
      - name: malware-scanner
...
resources:
  ...
  - name: malware-scanner
    type: org.cloudfoundry.managed-service
    parameters:
      service: malware-scanner
      service-plan: clamav

The malware scanner is used in the AttachmentService to scan attachments.

[!Note] The malware scanner supports both mTLS and basic authentication; mTLS is recommended as basic authentication has been deprecated.

If there is no malware scanner available, the attachments are automatically marked as Clean.

Scan status codes:

  • Clean: Only attachments with the status Clean are accessible.
  • Scanning: Immediately after upload, the attachment is marked as Scanning. Depending on processing speed, it may already appear as Clean when the page is reloaded.
  • Unscanned: Attachment is still unscanned.
  • Failed: Scanning failed.
  • Infected: The attachment is infected.
Specify the maximum file size

You can specify the maximum file size by annotating the attachments content property with @Validation.Maximum

entity Books {
  ...
  attachments: Composition of many Attachments;
}

annotate Books.attachments with {
  content @Validation.Maximum : '20MB';
}

The @Validation.Maximum value is a size string consisting of a number followed by a unit. The following units are supported:

  • B (bytes)
  • KB, MB, GB, TB (decimal units)
  • KiB, MiB, GiB, TiB (binary units)

The default is 400MB

Restrict allowed MIME types

You can restrict which MIME types are allowed for attachments by annotating the content property with @Core.AcceptableMediaTypes. This validation is performed during file upload.

entity Books {
  ...
  attachments: Composition of many Attachments;
}

annotate Books.attachments with {
  content @Core.AcceptableMediaTypes : ['image/jpeg', 'image/png', 'application/pdf'];
}

Wildcard patterns are supported:

annotate Books.attachments with {
  content @Core.AcceptableMediaTypes : ['image/*', 'application/pdf'];
}

To allow all MIME types (default behavior), either omit the annotation or use:

annotate Books.attachments with {
  content @Core.AcceptableMediaTypes : ['*/*'];
}
Content Disposition

Attachment content is served with Content-Disposition: attachment. Browsers therefore download the file instead of rendering it inline in the application origin. This is the safe default that mitigates stored XSS attacks via user-uploaded HTML or SVG payloads, because the content type of a stored attachment is derived from the uploaded file.

If your application intentionally wants to preview certain attachments inline (e.g. images restricted via @Core.AcceptableMediaTypes), you can opt in explicitly in your own CDS model:

using { sap.attachments.Attachments } from '@cap-js/cds-feature-attachments';

annotate Books.attachments with {
  content @Core.ContentDisposition.Type: 'inline';
}

Security warning: Only enable inline disposition for MIME types that cannot execute script — for example, plain images such as image/jpeg or image/png — restricted via @Core.AcceptableMediaTypes. Never enable inline disposition for image/svg+xml, text/html, application/xhtml+xml, or application/xml when the uploader is not fully trusted. Note that application/pdf may execute JavaScript in some PDF viewers (notably Adobe Reader); verify the viewer used by your target audience before allowing PDFs inline.

Outbox

In this plugin the persistent outbox is used to mark attachments as deleted. When using this plugin, the persistent outbox is enabled by default. In the capire documentation of the persistent outbox is it described how to overwrite the default outbox configuration.

If the default shall be used, nothing needs to be done.

Restore Endpoint

The attachment service has an event RESTORE_ATTACHMENTS. This event can be called with a timestamp to restore externally stored attachments.

Motivation

Documents which are marked as deleted can be restored.

The use cases behind this feature are:

  • Restoring attachments after a database backup is restored: When restoring a database backup, any attachments stored in external storage (object stores, etc.) also need to be restored to maintain data consistency.
  • Restoring attachments that were marked as deleted: The restore endpoint provides a way to recover attachments that were previously marked as deleted, making it possible to undo deletions if needed.

In the default implementation of the technical service AttachmentService this is not needed as the attachments are stored directly in the database and are restored with the database.

If the default implementation is replaced by overwriting the respective handler, for example by the SAP Document Management Service, then the overwriting plugin needs to handle the restore of attachments.

In such cases the restore endpoint can be used to restore attachments.

How long attachments are marked as deleted before they are actually deleted depends on the configuration of the used storage.

HTTP Endpoint

There is no predefined endpoint for the restore action. To call the action of the service from outside the application a service could be defined as in the following example:

service RestoreAttachments {
  action restoreAttachments (restoreTimestamp: Timestamp);
}

See Security for how to secure this endpoint. The action restoreAttachments could get in a timestamp from which the attachments need to be restored. The action could be called with a POST request to the endpoint:

  • OData v4: /odata/v4/RestoreAttachments/restoreAttachments
  • OData v2: /odata/v2/RestoreAttachments/restoreAttachments

With the body:

{
  "restoreTimestamp": "2024-04-17T10:36:38.813491100Z"
}

The action needs to be implemented and can call the attachment service as in the following example:


@ServiceName(RestoreAttachments_.CDS_NAME)
public class RestoreAttachmentsHandler implements EventHandler {

	private final AttachmentService attachmentService;

	public RestoreAttachmentsHandler(AttachmentService attachmentService) {
		this.attachmentService = attachmentService;
	}

	@On(event = RestoreAttachmentsContext.CDS_NAME)
	public void restoreAttachments(RestoreAttachmentsContext context) {
		attachmentService.restoreAttachment(context.getRestoreTimestamp());
		context.setCompleted();
	}

}

In the Spring Boot context the AttachmentService can be autowired in the handler.

Security

To secure the endpoint, security annotations can be used. For example:

using {Attachments} from `com.sap.cds/cds-feature-attachments`;

entity Items : cuid {
    ...
    attachments : Composition of many Attachments;
    ...
}

annotate RestoreAttachments with @(requires: 'internal-user');

Here the RestoreAttachments service is annotated with the requires annotation to secure the service. Various other annotations can be used to secure the service.

More information about the CAP Java security concept can be found in the CAP Java Documentation.

Releases: Maven Central and Artifactory

Minimum UI5 and CAP Java Version

ComponentMinimum Version
CAP Java3.10.3
UI51.136.0

Architecture Overview

Design
Multitenancy
  • When using SAP HANA as the storage target, multitenancy support depends on the consuming application. In most cases, multitenancy is achieved by using a dedicated schema for each tenant, providing strong data isolation at the database level.
  • When using an object store as the storage target, shared-bucket multitenancy is supported (since version 1.5.0). The plugin prefixes object keys with the tenant ID to ensure tenant isolation, and automatically cleans up tenant data on unsubscribe. See Object Stores Multitenancy for configuration details.
Object Stores

See Object Stores.

Model Texts

In the model, several fields are annotated with the @title annotation. Default texts are provided in 35 languages. If these defaults are not sufficient for an application, they can be overwritten by applications with custom texts or translations.

The following table gives an overview of the fields and the i18n codes:

Field Namei18n Code
contentattachment_content
mimeTypeattachment_mimeType
fileNameattachment_fileName
statusattachment_status
noteattachment_note

In addition to the field names, header information (@UI.HeaderInfo) are also annotated:

Header Infoi18n Code
TypeNameattachment
TypeNamePluralattachments

Monitoring & Logging

To configure logging for the attachments plugin, add the following line to the /srv/src/main/resources/application.yaml of the consuming application:

logging:
  level:
    ...
    '[com.sap.cds.feature.attachments]': DEBUG
...

Support, Feedback, Contributing

This project is open to feature requests/suggestions, bug reports etc. via GitHub issues.

Contribution and feedback are encouraged and always welcome. For more information about how to contribute, the project structure, as well as additional contribution information, see our Contribution Guidelines.

Apache-2.0, read

History

Latest

v1.7.0

Security 1, Features 2

Notes
Added
  • Added support for single (inline) attachments via the Attachment type. (#768)
  • Added top-level Attachments aspect to allow usage without sap.attachments namespace (#806), i.e., using {Attachments} from 'com.sap.cds/cds-feature-attachments'.
Security
  • Attachment content is now served with Content-Disposition: attachment by default (previously inline) to mitigate stored XSS (CWE-79) via user-uploaded SVG/HTML payloads (cds-calesi #1263). Applications that require inline previews can opt in by annotating content in their own CDS model — see the "Content Disposition" section in the README. It is recommended to combine this with @Core.AcceptableMediaTypes restricting inline content to non-scriptable types (e.g. image/jpeg, image/png, application/pdf).

Full Changelog: https://github.com/cap-java/cds-feature-attachments/compare/1.6.0...1.7.0

  1. v1.6.0

    Features 4, Changed 3

    Notes
    Added
    • Added top-level Attachments aspect to allow usage without sap.attachments namespace (#806), i.e., using {Attachments} from 'com.sap.cds/cds-feature-attachments'.
    • Extract fileName and mimeType from HTTP headers (Content-Disposition, Content-Type, slug) when not provided in the request payload (#804)
    • Added independent MalwareScannerService for scanning arbitrary content without the AttachmentService (#785)
    • Added translations for ScanStates entity texts (#787, #814)
    Changed
    • Upgraded to CAP Java CDS 5 / @sap/cds-dk 10 (#856)
    • Minimum required Java version raised from 17 to 21 (#856)
    • Enabled S3 server-side encryption (AES256) by default for AWS Object Store (#788)

    Full Changelog: https://github.com/cap-java/cds-feature-attachments/compare/1.5.0...1.6.0

  2. v1.5.0

  3. v1.4.1

  4. v1.4.0

  5. v1.3.3

  6. v1.3.2

  7. v1.3.1

  8. v1.3.0

  9. v1.2.4

  10. v1.2.3

  11. v1.2.2

    Notes
    Changed
    • Several version bumps
    Fixed
    • Deletion error when having "fiori": {"draft_messages": true } (#526)

    Full Changelog: https://github.com/cap-java/cds-feature-attachments/compare/1.2.1...1.2.2

  12. v1.2.1

    Notes
    Changed
    • Several version bumps
    • Apply GoogleJavaFormat style GOOGLE and enforce that for PRs (#551)
    Fixed
    • Usage of malware scanner with non-HANA storage (#557)
    What's Changed
    • Fix usage of malware scanner with non-HANA storage (#557)
    • chore: Cleanup some pom.xml files (#555)
    • Apply GoogleJavaFormat style GOOGLE and enforce that for PRs (#551)
    • Bump latest test cds-dk to 9.2.1 (#552)
    • Update CHANGELOG.md and bump revision to 1.2.1-SNAPSHOT (#550)
    • Bump org.springframework.boot:spring-boot-dependencies from 3.5.4 to 3.5.5 (#543)
    • Bump com.google.cloud:google-cloud-storage from 2.55.0 to 2.56.0 (#541)
    • Bump com.github.spotbugs:spotbugs-maven-plugin from 4.9.3.2 to 4.9.4.0 (#544)
    • Bump software.amazon.awssdk:s3 from 2.32.29 to 2.32.31 (#547)
    • Bump com.sap.cloud.sdk:sdk-bom from 5.21.0 to 5.22.0 (#549)
    • Move Storage Targets section up (#548)

    Full Changelog: https://github.com/cap-java/cds-feature-attachments/compare/1.2.0...1.2.1

  13. v1.2.0

    Notes
    Added
    • Support for Object Stores (AWS, Azure and Google) (#481)
    Changed
    • Rename folder 'examples' to 'storage-targets' and add section about this in the README.md (#519)
    • Use spotless plugin to ensure correct license header (#515)
    • Several version bumps
    What's Changed
    • Dependabot PRs (#538) by @lisajulia in #ba4364f6
    • Bump actions/checkout from 4 to 5 (#516) by @dependabot[bot] in #8fc57485
    • Use spotless plugin to ensure correct license header (#515) by @mofterdinger in #734c2a9d
    • Connection to AWS, Azure and Google object store (#481) by @mofterdinger in #8dedd3ae
    • Rename folder 'examples' to 'storage-targets' and add section about this in the README.md (#519) by @lisajulia in #dcf00a92
    • Bump org.assertj:assertj-core from 3.27.3 to 3.27.4 (#514) by @dependabot[bot] in #fd815dc2
    • Minor code improvements (#508) by @mofterdinger in #62319874
    • Bump actions/download-artifact from 4 to 5 (#513) by @dependabot[bot] in #4ceca19f
    • Bump com.sap.cloud.sdk:sdk-bom from 5.20.0 to 5.21.0 (#509) by @dependabot[bot] in #9bc437dd
    • Bump cds-services and cds-dk to latest versions (#510) by @mofterdinger in #aa0bee61
    • Bump org.pitest:pitest-maven from 1.20.0 to 1.20.1 (#506) by @dependabot[bot] in #692a313b
    • Bump org.codehaus.mojo:flatten-maven-plugin from 1.7.1 to 1.7.2 (#507) by @dependabot[bot] in #1ead7b9a
    • Bump LTS and latest cds-dk versions (#505) by @mofterdinger in #967d5a6c

    Full Changelog: https://github.com/cap-java/cds-feature-attachments/compare/1.1.0...1.2.0

  14. v1.1.0

    Notes
    Added
    • Run integration tests also with CAP Java 4.x and @sap/cds-dk@^9 to ensure compatibility with latest available versions.
    Changed
    • Bumped minimum required version of CAP Java to 3.10.3.
    • Avoid the generation of POJOs for cds.outbox and sap.common contexts.
    • Replaced usage of generic interface CdsData with specific interface Attachments to improve type safety.
    Fixed
    ## What's Changed

    Full Changelog: https://github.com/cap-java/cds-feature-attachments/compare/1.0.9...1.1.0

  15. v1.0.9

    Notes
    Changed
    What's Changed

    Full Changelog: https://github.com/cap-java/cds-feature-attachments/compare/1.0.8...1.0.9

  16. v1.0.8

    Changed 51

    Notes
    Changed
    What's Changed

    Full Changelog: https://github.com/cap-java/cds-feature-attachments/compare/1.0.7...1.0.8

  17. v1.0.7

    Notes
    Changed
    Fixed
  18. v1.0.6

    Notes
    Added
    Changed
  19. v1.0.5

    Notes
    Added
    • Added support to configure the HTTP client pool to Malware Scanning Service. Supported configuration properties are:
      • cds.attachments.malwareScanner.http.timeout: The HTTP request timeout in seconds, defaults to 120s
      • cds.attachments.malwareScanner.http.maxConnections: The max. number of parallel HTTP connections to Malware Scanning Service, defaults to 20 connections
    Changed
    Fixed
    • Fixed a bug that caused malware scanning to fail, if the content was stored in a HANA DB.
  20. v1.0.4

    Notes
    Added
    Changed
    • Updated several dependencies and Maven build plugins to latest versions.
    Fixed
  21. v1.0.3

  22. v1.0.2

  23. v1.0.1

  24. v1.0.0

Attachments
  1. SAP Document Management service, integration optionAPIs and a UI5 component for document management in apps
  2. cap-attachments-plusCAP Node.js attachments plugin with database or cloud storage
  3. com.sap.cds:sdmCAP Java plugin for attachments in SAP Document Management
  4. @cap-js/attachmentsCAP Node.js attachments with database, S3, Azure or GCP storage
  5. @cap-js/sdmCAP attachments stored in an SAP Document Management repository
  6. @sap/cdsCAP Node.js runtime
  7. @tklein1801/cap-js-attachmentsCAP Node.js attachments plugin with Object Store and malware scanning
  8. sap-cap-sdm-pluginCAP Node.js plugin mapping CDS entities to SAP Document Management

Details

Sources3
Added by handdiscovered herechecked
github.com/cap-java/cds-feature-attachmentstree, pushes, contributors, CIchecked
README.mdquoted, and what the entry declareschecked

Sources are graph entities: the same page may back several entries, and an unreachable source flags every row that rests on it.

Compatibility and provenance
runtimesjava
discovered viaAdded by hand
first seen in the atlas
ecosystem and domaincap, data-and-persistence
Flavors1
Java
“CAP Java plugin” — cap-java/cds-feature-attachments — READMEchecked
Contributors9
History in the atlas4
  1. The cds-feature-attachments-oss module is selected.
  2. btp-malware-scanning, btp-object-store
  3. Adds attachment storage and handling to CAP Java through an Attachments aspect. The base Maven dependency stores content in the database; com.sap.cds:cds-feature-attachments-oss selects AWS, Azure or Google Object Store storage.
  4. First seen.
For your agent
Ref
artifact:cap-java-cds-feature-attachments
JSON
/artifacts/cap-java-cds-feature-attachments.json
MCP
Connecting an agent