diff options
Diffstat (limited to 'together/node_modules/formidable/src/PersistentFile.js')
-rw-r--r-- | together/node_modules/formidable/src/PersistentFile.js | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/together/node_modules/formidable/src/PersistentFile.js b/together/node_modules/formidable/src/PersistentFile.js new file mode 100644 index 0000000..3a28aa7 --- /dev/null +++ b/together/node_modules/formidable/src/PersistentFile.js @@ -0,0 +1,87 @@ +/* eslint-disable no-underscore-dangle */ + +'use strict'; + +const fs = require('fs'); +const crypto = require('crypto'); +const { EventEmitter } = require('events'); + +class PersistentFile extends EventEmitter { + constructor({ filepath, newFilename, originalFilename, mimetype, hashAlgorithm }) { + super(); + + this.lastModifiedDate = null; + Object.assign(this, { filepath, newFilename, originalFilename, mimetype, hashAlgorithm }); + + this.size = 0; + this._writeStream = null; + + if (typeof this.hashAlgorithm === 'string') { + this.hash = crypto.createHash(this.hashAlgorithm); + } else { + this.hash = null; + } + } + + open() { + this._writeStream = new fs.WriteStream(this.filepath); + this._writeStream.on('error', (err) => { + this.emit('error', err); + }); + } + + toJSON() { + const json = { + size: this.size, + filepath: this.filepath, + newFilename: this.newFilename, + mimetype: this.mimetype, + mtime: this.lastModifiedDate, + length: this.length, + originalFilename: this.originalFilename, + }; + if (this.hash && this.hash !== '') { + json.hash = this.hash; + } + return json; + } + + toString() { + return `PersistentFile: ${this._file.newFilename}, Original: ${this._file.originalFilename}, Path: ${this._file.filepath}`; + } + + write(buffer, cb) { + if (this.hash) { + this.hash.update(buffer); + } + + if (this._writeStream.closed) { + cb(); + return; + } + + this._writeStream.write(buffer, () => { + this.lastModifiedDate = new Date(); + this.size += buffer.length; + this.emit('progress', this.size); + cb(); + }); + } + + end(cb) { + if (this.hash) { + this.hash = this.hash.digest('hex'); + } + this._writeStream.end(() => { + this.emit('end'); + cb(); + }); + } + + destroy() { + this._writeStream.destroy(); + fs.unlink(this.filepath, () => {}); + } +} + +module.exports = PersistentFile; |