{% include anchor.html edit="true" title="Save an attachment" hash="save_attachment" %} 

{% highlight js %}
db.putAttachment(docId, attachmentId, [rev], attachment, type, [callback]);
{% endhighlight %}

Attaches a binary object to a document.

This method will update an existing document to add the attachment, so it requires a `rev` if the document already exists. If the document doesn't already exist, then this method will create an empty document containing the attachment.

What's the point of attachments? If you're dealing with large binary data (such as PNGs), you may incur a performance or storage penalty if you naïvely include them as base64- or hex-encoded strings inside your documents. But if you insert the binary data as an attachment, then PouchDB will attempt to store it in [the most efficient way possible](http://pouchdb.com/faq.html#data_types).

For details, see the [CouchDB documentation on attachments](https://wiki.apache.org/couchdb/HTTP_Document_API#Attachments).

#### Example Usage:

{% include code/start.html id="attach1" type="callback" %}
{% highlight js %}
var attachment = new Blob(['Is there life on Mars?'], {type: 'text/plain'});
db.putAttachment('doc', 'att.txt', attachment, 'text/plain', function(err, res) {
  if (err) { return console.log(err); }
  // handle result
});
{% endhighlight %}
{% include code/end.html %}

{% include code/start.html id="attach1" type="async" %}
{% highlight js %}
try {
  var attachment = new Blob(['Is there life on Mars?'], {type: 'text/plain'});
  var result = await db.putAttachment('doc', 'att.txt', attachment, 'text/plain');
} catch (err) {
  console.log(err);
}
{% endhighlight %}
{% include code/end.html %}

{% include code/start.html id="attach1" type="promise" %}
{% highlight js %}
var attachment = new Blob(['Is there life on Mars?'], {type: 'text/plain'});
db.putAttachment('doc', 'att.txt', attachment, 'text/plain').then(function (result) {
  // handle result
}).catch(function (err) {
  console.log(err);
});
{% endhighlight %}
{% include code/end.html %}


#### Example Response:
{% highlight js %}
{
  "ok": true,
  "id": "doc",
  "rev": "2-068E73F5B44FEC987B51354DFC772891"
}
{% endhighlight %}

Within Node, you must use a `Buffer` instead of a `Blob`:

{% highlight js %}
var attachment = new Buffer('Is there life on Mars?');
{% endhighlight %}

For details, see the [Mozilla docs on `Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) or the [Node docs on `Buffer`](http://nodejs.org/api/buffer.html).

If you need a shim for older browsers that don't support the `Blob` constructor, or you want some convenience methods for Blobs, you can use [blob-util](https://github.com/nolanlawson/blob-util).

#### Save a base64 attachment

If you supply a string instead of a `Blob`/`Buffer`, then it will be assumed to be a base64-encoded string, and will be processed accordingly:

{% include code/start.html id="attach3" type="callback" %}
{% highlight js %}
var attachment = 
        "TGVnZW5kYXJ5IGhlYXJ0cywgdGVhciB1cyBhbGwgYXBhcnQKTWFrZS" +
        "BvdXIgZW1vdGlvbnMgYmxlZWQsIGNyeWluZyBvdXQgaW4gbmVlZA==";
db.putAttachment('doc', 'att.txt', attachment, 'text/plain', function(err, res) {
  if (err) { return console.log(err); }
  // handle result
});
{% endhighlight %}
{% include code/end.html %}

{% include code/start.html id="attach3" type="async" %}
{% highlight js %}
try {
  var attachment =
    "TGVnZW5kYXJ5IGhlYXJ0cywgdGVhciB1cyBhbGwgYXBhcnQKTWFrZS" +
    "BvdXIgZW1vdGlvbnMgYmxlZWQsIGNyeWluZyBvdXQgaW4gbmVlZA==";
  var result = await db.putAttachment('doc', 'att.txt', attachment, 'text/plain');
} catch (err) {
  console.log(err);
}
{% endhighlight %}
{% include code/end.html %}

{% include code/start.html id="attach3" type="promise" %}
{% highlight js %}
var attachment = 
        "TGVnZW5kYXJ5IGhlYXJ0cywgdGVhciB1cyBhbGwgYXBhcnQKTWFrZS" +
        "BvdXIgZW1vdGlvbnMgYmxlZWQsIGNyeWluZyBvdXQgaW4gbmVlZA==";
db.putAttachment('doc', 'att.txt', attachment, 'text/plain').then(function (result) {
  // handle result
}).catch(function (err) {
  console.log(err);
});
{% endhighlight %}
{% include code/end.html %}


#### Save an inline attachment

You can also inline attachments inside the document. The attachment data may be supplied as a base64-encoded string with the `content_type`:

{% include code/start.html id="attach2" type="callback" %}
{% highlight js %}
var doc = {
  "_id": "doc",
  "title": "Legendary Hearts",
  "_attachments": {
    "att.txt": {
      "content_type": "text/plain",
      "data": "TGVnZW5kYXJ5IGhlYXJ0cywgdGVhciB1cyBhbGwgYXBhcnQKTWFrZS" +
              "BvdXIgZW1vdGlvbnMgYmxlZWQsIGNyeWluZyBvdXQgaW4gbmVlZA=="
    }
  }
};
db.put(doc, function (err, result) {
  if (err) { return console.log(err); }
  // handle result
});
{% endhighlight %}
{% include code/end.html %}

{% include code/start.html id="attach2" type="async" %}
{% highlight js %}
try {
  var doc = {
    "_id": "doc",
    "title": "Legendary Hearts",
    "_attachments": {
      "att.txt": {
        "content_type": "text/plain",
        "data": "TGVnZW5kYXJ5IGhlYXJ0cywgdGVhciB1cyBhbGwgYXBhcnQKTWFrZS" +
          "BvdXIgZW1vdGlvbnMgYmxlZWQsIGNyeWluZyBvdXQgaW4gbmVlZA=="
      }
    }
  };
  var result = await db.put(doc);
} catch (err) {
  console.log(err);
}
{% endhighlight %}
{% include code/end.html %}

{% include code/start.html id="attach2" type="promise" %}
{% highlight js %}
var doc = {
  "_id": "doc",
  "title": "Legendary Hearts",
  "_attachments": {
    "att.txt": {
      "content_type": "text/plain",
      "data": "TGVnZW5kYXJ5IGhlYXJ0cywgdGVhciB1cyBhbGwgYXBhcnQKTWFrZS" +
              "BvdXIgZW1vdGlvbnMgYmxlZWQsIGNyeWluZyBvdXQgaW4gbmVlZA=="
    }
  }
};
db.put(doc).then(function (result) {
  // handle result
}).catch(function (err) {
  console.log(err);
});
{% endhighlight %}
{% include code/end.html %}

#### Save an inline Blob/Buffer attachment

You can also inline `Blob`s/`Buffer`s:

{% include code/start.html id="attach4" type="callback" %}
{% highlight js %}
var doc = {
  "_id": "doc",
  "title": "Legendary Hearts",
  "_attachments": {
    "att.txt": {
      "content_type": "text/plain",
      "data": new Blob(['Is there life on Mars?'], {type: 'text/plain'})
    }
  }
};
db.put(doc, function (err, result) {
  if (err) { return console.log(err); }
  // handle result
});
{% endhighlight %}
{% include code/end.html %}

{% include code/start.html id="attach4" type="async" %}
{% highlight js %}
try {
  var doc = {
    "_id": "doc",
    "title": "Legendary Hearts",
    "_attachments": {
      "att.txt": {
        "content_type": "text/plain",
        "data": new Blob(['Is there life on Mars?'], {type: 'text/plain'})
      }
    }
  };
  var result = await db.put(doc);
} catch (err) {
  console.log(err);
}
{% endhighlight %}
{% include code/end.html %}

{% include code/start.html id="attach4" type="promise" %}
{% highlight js %}
var doc = {
  "_id": "doc",
  "title": "Legendary Hearts",
  "_attachments": {
    "att.txt": {
      "content_type": "text/plain",
      "data": new Blob(['Is there life on Mars?'], {type: 'text/plain'})
    }
  }
};
db.put(doc).then(function (result) {
  // handle result
}).catch(function (err) {
  console.log(err);
});
{% endhighlight %}
{% include code/end.html %}

#### Save many attachments at once

The inline approach allows you to save multiple attachments to the same document in a single shot:

{% include code/start.html id="attach5" type="callback" %}
{% highlight js %}
var doc = {
  "_id": "doc",
  "title": "Legendary Hearts",
  "_attachments": {
    "att.txt": {
      "content_type": "text/plain",
      "data": new Blob(
        ["And she's hooked to the silver screen"],
        {type: 'text/plain'})
    },
    "att2.txt": {
      "content_type": "text/plain",
      "data": new Blob(
        ["But the film is a saddening bore"],
        {type: 'text/plain'})
    },
    "att3.txt": {
      "content_type": "text/plain",
      "data": new Blob(
        ["For she's lived it ten times or more"],
        {type: 'text/plain'})
    }
  }
};
db.put(doc, function (err, result) {
  if (err) { return console.log(err); }
  // handle result
});
{% endhighlight %}
{% include code/end.html %}

{% include code/start.html id="attach5" type="async" %}
{% highlight js %}
try {
  var doc = {
    "_id": "doc",
    "title": "Legendary Hearts",
    "_attachments": {
      "att.txt": {
        "content_type": "text/plain",
        "data": new Blob(
          ["And she's hooked to the silver screen"],
          {type: 'text/plain'})
      },
      "att2.txt": {
        "content_type": "text/plain",
        "data": new Blob(
          ["But the film is a saddening bore"],
          {type: 'text/plain'})
      },
      "att3.txt": {
        "content_type": "text/plain",
        "data": new Blob(
          ["For she's lived it ten times or more"],
          {type: 'text/plain'})
      }
    }
  };
  var result = await db.put(doc);
} catch (err) {
  console.log(err);
}
{% endhighlight %}
{% include code/end.html %}

{% include code/start.html id="attach5" type="promise" %}
{% highlight js %}
var doc = {
  "_id": "doc",
  "title": "Legendary Hearts",
  "_attachments": {
    "att.txt": {
      "content_type": "text/plain",
      "data": new Blob(
        ["And she's hooked to the silver screen"], 
        {type: 'text/plain'})
    },
    "att2.txt": {
      "content_type": "text/plain",
      "data": new Blob(
        ["But the film is a saddening bore"], 
        {type: 'text/plain'})
    },
    "att3.txt": {
      "content_type": "text/plain",
      "data": new Blob(
        ["For she's lived it ten times or more"], 
        {type: 'text/plain'})
    }
  }
};
db.put(doc).then(function (result) {
  // handle result
}).catch(function (err) {
  console.log(err);
});
{% endhighlight %}
{% include code/end.html %}

See [Inline Attachments](http://wiki.apache.org/couchdb/HTTP_Document_API#Inline_Attachments)
on the CouchDB wiki for details.


