クレードルの readme にまもなく統合されることを願って、添付ファイルに関するいくつかのドキュメントを作成しました。今のところ、ここに関連するセクションがあります
付属品
クレードルは、添付ファイルの書き込み、読み取り、および削除をサポートしています。読み取りおよび書き込み操作は、バッファリングまたはストリーミングのいずれかです。
書き込み
添付ファイルの本文全体をバッファリングして、1 つの要求として一度に送信できます。添付ファイルのアップロードが完了するか、エラーが発生すると、コールバック関数が起動します
構文
db.saveAttachment(idData, attachmentData, callbackFunction)
例
「fooAttachment.txt」という名前と「Foo document text」という内容の添付ファイルとしてテキスト ドキュメントを保存するとします。
var doc = <some existing document>
var id = doc._id
var rev = doc._rev
var idAndRevData = {
id: id,
rev: rev
}
var attachmentData = {
name: 'fooAttachment.txt',
'Content-Type': 'text/plain',
body: 'Foo document text'
}
db.saveAttachment(idAndRevData, attachmentData, function (err, reply) {
if (err) {
console.dir(err)
return
}
console.dir(reply)
})
ストリーミング
最初に本文全体をバッファリングするのではなく、読み取りストリームを使用して添付ファイルの本文をアップロードできます。ストリーミング アップロードが完了するか、エラーが発生すると、コールバック関数が起動します。
構文
var doc = savedDoc // <some saved couchdb document which has an attachment>
var id = doc._id
var rev = doc._rev
var idAndRevData = {
id: id,
rev: rev
}
var attachmentData = {
name: attachmentName // something like 'foo.txt'
'Content-Type': attachmentMimeType // something like 'text/plain', 'application/pdf', etc.
body: rawAttachmentBody // something like 'foo document body text'
}
var readStream = fs.createReadStream('/path/to/file/')
var writeStream = db.saveAttachment(idData, attachmentData, callbackFunction)
readStream.pipe(writeStream)
ストリーミングのアップロードが完了すると、コールバック関数が起動します
例
パス './data/bar.pdf' にある 'bar.pdf' という名前の pdf ファイルを既存のドキュメントに添付します。
var path = require('path')
var fs = require('fs')
// this document should already be saved in the couchdb database
var doc = {
_id: 'fooDocumentID',
_rev: 'fooDocumentRev'
}
var idData = {
id: doc._id,
rev: doc._rev
}
var filename = 'bar.pdf' // this is the filename that will be used in couchdb. It can be different from your source filename if desired
var filePath = path.join(__dirname, 'data', 'bar.pdf')
var readStream = fs.createReadStream
// note that there is no body field here since we are streaming the upload
var attachmentData = {
name: 'fooAttachment.txt',
'Content-Type': 'text/plain'
}
db.saveAttachment(idData, attachmentData, function (err, reply) {
if (err) {
console.dir(err)
return
}
console.dir(reply)
}, readStream)
読む
緩衝
添付ファイル全体をバッファリングして、一度に受信できます。ダウンロードが完了するか、エラーが発生すると、コールバック関数が起動します。コールバックの 2 番目のパラメーターは、添付ファイルのバイナリ データです。
構文
db.getAttachment(documentID, attachmentName, callbackFunction)
例
「foo.txt」という名前で保存された添付ファイルを読み返したいとします。
var doc = <some saved document that has an attachment with name *foo.txt*>
var id = doc._id
var attachmentName = 'foo.txt'
db.getAttachment(id, attachmentName, function (err, reply) {
if (err) {
console.dir(err)
return
}
console.dir(reply)
})
ストリーミング
添付ファイルもストリーミングできます。添付ファイルが大きい場合、メモリ消費を制限するためにストリーミングすると便利です。ダウンロード ストリームが完了すると、コールバック関数が起動します。コールバック関数に渡されるエラー パラメータは 1 つだけであることに注意してください。error は null で、エラーが発生していないか、添付ファイルのダウンロード中にエラーが発生した場合はエラー オブジェクトです。バッファリングされた読み取りの例のように、添付データを含む 2 番目のパラメータはありません
構文
var readStream = db.getAttachment(documentID, attachmentName, callbackFunction)
例
「foo.txt」という名前で保存された添付ファイルを読み返したいとします。ただし、添付ファイル foo.txt は非常に大きいため、ファイル全体をメモリにバッファリングするのではなく、ディスクにストリーミングする必要があります。
var doc = <some saved document that has an attachment with name *foo.txt*>
var id = doc._id
var attachmentName = 'foo.txt'
var downloadPath = path.join(__dirname, 'foo_download.txt')
var writeStream = fs.createWriteStream(downloadPath)
var readStream = db.getAttachment('piped-attachment', 'foo.txt', function (err) { // note no second reply paramter
if (err) {
console.dir(err)
return
}
console.dir('download completed and written to file on disk at path', downloadPath)
})
readStream.pipe(writeStream)
削除する
_id と添付ファイル名を使用して、アップロードされた添付ファイルを削除できます
構文
db.removeAttachment(documentID, attachmentName, callbackFunction)
例
「foo.txt」という名前で保存された添付ファイルを削除したいとします。
var doc = <some saved document that has an attachment with name *foo.txt*>
var id = doc._id
var attachmentName = 'foo.txt'
db.removeAttachment(id, attachmentName, function (err, reply) {
if (err) {
console.dir(err)
return
}
console.dir(reply)
})