比较S3对象和本地对象准确的方法(accurate method to compare the s3

2019-11-05 09:47发布

我保存在MS和文件大小的修改时间到S3对象的元数据。 我意识到,即使我没有,如果我打开它,然后只需保存文件,而无需编辑对我的文件进行任何更改。 修改后的时间将被改变,并且在这种情况下,将更新S3对象。 我想用尺寸大小,但因为对于大小是一样的,即使修改后的机会就不太准确太。 我也用Binary得到了回来s3.getObject和本地的文件, Binary ,但没有任何变化。 该Binary不会是相同的了。 什么是跟踪变化的更好更准确的方法?

我在我的代码是这样节省了文件修改MS和文件大小

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。 这是不保存任何进入DB所以没有信息将在所有的情况下被保存有一些保存到数据库,为了比较的想法

Answer 1:

以比较一个Amazon S3对象的本地文件的内容,使用ETag的 ,这是对内容的校验和。 ETag的检索关于一个S3对象的信息时是可用的。

请参阅: 所有关于AWS S3的ETag - Teppen.io

此外,请注意,通过多部分上传上传的对象有一个稍微更复杂的计算。 请参阅: 什么是算法来计算亚马逊S3的Etag超过5GB大的文件?



文章来源: accurate method to compare the s3 object and local object