Я сохранил измененное время в мс и размер файла в метаданных объекта в s3.Я понял, что даже если я ничего не изменил для своего файла, если я его открою, просто сохраните файл без редактирования.Измененное время будет изменено, и в этом случае будет обновлен объект s3.Я думал об использовании размера, но размер не был бы таким же точным, потому что есть вероятность того, что размер будет одинаковым даже после изменения.Я также использовал Binary
полученный от s3.getObject
и локально файл Binary
, но без каких-либо изменений.Binary
тоже не будет таким же.Что может быть лучше и точнее для отслеживания изменений?
У меня есть что-то вроде этого в моем коде, который сохраняет измененный файл мс и размер файла
fs.readFile(path, async (err, fileBinary) => {
if (err) throw err;
const s3 = new AWS.S3();
const Key = path.replace(process.env.WATCH_PATH, '');
const filename = Key.split('/').pop();
// if filename is within the regex, ignore the file. Do nothing.
if (new RegExp(IGNORE_FILES_TO_S3()).test(filename)) return false;
const getStat = await getFileStat(path);
// console.log(getStat, 'getstatsssssssssssssss');
const s3PutParams = {
Body: fileBinary,
Bucket: process.env.S3_BUCKET,
Key,
Metadata: { // thought of saving these two as comparison in future usage, which works but really really accurate though
mtimeMs: String(getStat.mtimeMs),
size: String(getStat.size)
}
};
// rest of the code here just do comparisons and decide if `s3.putOjbect` should be done or not.
});
мой getFileStat()
exports.getFileStat = (path) => {
/*
SAMPLE: success
{
dev: 2097,
mode: 33204,
nlink: 1,
uid: 1000,
gid: 1000,
rdev: 0,
blksize: 4096,
ino: 5639856,
size: 2,
blocks: 8,
atimeMs: 1545952029779.866,
mtimeMs: 1545952020431.9802,
ctimeMs: 1545952020439.98,
birthtimeMs: 1545952020439.98,
atime: 2018-12-27T23:07:09.780Z,
mtime: 2018-12-27T23:07:00.432Z,
ctime: 2018-12-27T23:07:00.440Z,
birthtime: 2018-12-27T23:07:00.440Z
}
*/
return new Promise((res, rej) => {
fs.stat(path, (err, stat) => {
if (err) rej(err);
res(stat);
});
});
};
Заранее благодарим за любые предложения и помощь.
PS.Это ничего не сохраняет в БД, поэтому никакая информация не будет сохранена вообще, если есть идея что-то сохранить в БД для сравнения