Skip to content

Commit

Permalink
Added FILESTORAGE().copy(id, path, [callback]).
Browse files Browse the repository at this point in the history
  • Loading branch information
petersirka committed Jul 3, 2024
1 parent 16fbc80 commit 6eb01d9
Showing 1 changed file with 78 additions and 0 deletions.
78 changes: 78 additions & 0 deletions filestorage.js
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,84 @@ FP._read = function(id, callback, nostream) {
return self;
};

FP.copy = function(id, path, callback) {
var self = this;
if (callback)
return self._copy(id, path, callback);
else
return new Promise((resolve, reject) => self._copy(id, path, (err, res) => err ? reject(err) : resolve(res)));
};

FP._copy = function(id, path, callback) {

var self = this;

if (self.pause) {
setTimeout(self._copy, 500, id, path, callback);
return self;
}

var filename = Path.join(self.makedirectory(id), id + '.file');

F.stats.performance.open++;
Fs.open(filename, 'r', function(err, fd) {

if (err) {
callback(err);
return;
}

var buffer = Buffer.alloc(HEADERSIZE);
Fs.read(fd, buffer, 0, HEADERSIZE, 0, function(err) {

if (err) {
Fs.close(fd, NOOP);
callback(err);
return;
}

var str = buffer.toString('utf8').replace(REGCLEAN, '');
if (!str) {
// Invalid file
Fs.close(fd, function() {
if (buffer.length === HEADERSIZE)
Fs.unlink(filename, NOOP);
});
callback('File not found');
return;
}

var meta = str.parseJSON(true);
if (!meta) {
Fs.close(fd, NOOP);
callback('Invalid file');
return;
}

meta.id = id;

if (meta.expire && meta.expire < NOW) {
Fs.close(fd, NOOP);
callback('File is expired');
return;
}

F.stats.performance.open++;

var reader = Fs.createReadStream(filename, { fd: fd, start: HEADERSIZE });
var writer = Fs.createWriteStream(path.includes('.') ? path : Path.join(path, meta.name));

reader.pipe(writer);

CLEANUP(reader, function() {
callback(err, meta);
Fs.close(fd, NOOP);
});

});
});
};

FP.readbuffer = function(id, callback) {
var self = this;
if (callback)
Expand Down

0 comments on commit 6eb01d9

Please sign in to comment.