// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT
= image:kamelets/dropbox-sink.svg[] Dropbox Sink

*Provided by: "Apache Software Foundation"*

Upload Files to Dropbox.

The Kamelet expects the following headers to be set:

- `file` / `ce-file`: as the file name to upload

If the header won't be set the exchange ID will be used as file name.

== Configuration Options

The following table summarizes the configuration options available for the `dropbox-sink` Kamelet:
[width="100%",cols="2,^2,3,^2,^2,^3",options="header"]
|===
| Property| Name| Description| Type| Default| Example
| *accessToken {empty}* *| Dropbox Access Token| The access Token to use to access Dropbox| string| | 
| *clientIdentifier {empty}* *| The client identifier| Dropbox App client Identifier| string| | 
| *remotePath {empty}* *| Remote path| Original file or folder to work with| string| | 
| *uploadMode {empty}* *| Upload Mode| Which mode to upload. in case of add the new file will be renamed if a file with the same name already exists on dropbox. in case of force if a file with the same name already exists on dropbox, this will be overwritten. The value can be one of add, force.| string| `"add"`| 
|===

NOTE: Fields marked with ({empty}*) are mandatory.

== Usage

This section summarizes how the `dropbox-sink` can be used in various contexts.

=== Knative Sink

The `dropbox-sink` Kamelet can be used as Knative sink by binding it to a Knative object.

.dropbox-sink-binding.yaml
[source,yaml]
----
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
  name: dropbox-sink-binding
spec:
  source:
    ref:
      kind: InMemoryChannel
      apiVersion: messaging.knative.dev/v1
      name: mychannel
  sink:
    ref:
      kind: Kamelet
      apiVersion: camel.apache.org/v1alpha1
      name: dropbox-sink
    properties:
      accessToken: "The Dropbox Access Token"
      clientIdentifier: "The The client identifier"
      remotePath: "The Remote path"

----

Make sure you have xref:latest@camel-k::installation/installation.adoc[Camel K installed] into the Kubernetes cluster you're connected to.

Save the `dropbox-sink-binding.yaml` file into your hard drive, then configure it according to your needs.

You can run the sink using the following command:

[source,shell]
----
kubectl apply -f dropbox-sink-binding.yaml
----
// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT
