全部产品
Search
文档中心

对象存储 OSS:Node.js限定条件下载

更新时间:Dec 20, 2023

下载文件(Object)时允许指定条件。满足条件则下载,不满足条件则返回错误且不下载。

下载早于指定时间修改的文件

以下代码用于下载早于指定时间修改的文件:

const OSS = require('ali-oss');

const client = new OSS({
  // yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
  region: 'yourRegion',
  // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  // 填写Bucket名称。
  bucket: 'examplebucket'
});

async function main() {
  try {
    // 向目标Bucket上传名为exampleobject.txt的文件,文件内容自定义。
    await client.put("exampleobject.txt", Buffer.from("contenttest"));
    // 在请求头If-Modified-Since中指定时间,如果指定的时间早于文件实际修改时间,则下载文件。
    let result = await client.get("exampleobject.txt", {
      headers: {
        "If-Modified-Since": new Date("1970-01-01").toGMTString(),
      },
    });
    console.log(result.content.toString() === "contenttest");
    console.log(result.res.status === 200);

    // 如果指定的时间等于或者晚于文件实际修改时间,则返回304 Not Modified。
    result = await client.get("exampleobject.txt", {
      headers: {
        "If-Modified-Since": new Date().toGMTString(),
      },
    });
    console.log(result.content.toString() === "");
    console.log(result.res.status === 304);
  } catch (e) {
    console.log(e.code === "Not Modified");
  }
}

main();

关于Bucket命名规范的详情,请参见存储空间(Bucket)。关于Object命名规范的详情,请参见对象(Object)

下载不早于指定时间修改的文件

以下代码用于下载不早于(即等于或晚于)指定时间修改的文件:

const OSS = require('ali-oss');

const client = new OSS({
  // yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
  region: 'yourRegion',
  // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  // 填写Bucket名称。
  bucket: 'examplebucket'
});

async function main() {
  // 向目标Bucket上传名为exampleobject.txt的文件,并获取文件的ETag。
  let {res: {headers: {etag}}}  = await client.put('exampleobject.txt', Buffer.from('contenttest'));

  // 在请求头If-Match中传入ETag,如果传入的ETag和文件的ETag匹配,则下载文件。
  let result = await client.get("exampleobject.txt", {
    headers: {
      "If-Match": etag,
    },
  });
  console.log(result.content.toString() === "contenttest");
  console.log(result.res.status === 200);

  // 如果传入的ETag和文件的ETag不匹配,则返回412 Precondition Failed。
  try {
    await client.get("exampleobject.txt", {
      headers: {
        "If-Match": etag,
      },
    });
  } catch (e) {
    console.log(e.status === 412);
    console.log(e.code === "PreconditionFailed");
  }
}

main();

下载与指定ETag匹配的文件

ETag用于标识文件内容是否发生变化。以下代码用于下载与指定ETag匹配的文件:

const OSS = require('ali-oss');

const client = new OSS({
  // yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
  region: 'yourRegion',
  // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  // 填写Bucket名称。
  bucket: 'examplebucket'
});

async function main() {
  // 向目标Bucket上传名为exampleobject.txt的文件,并获取文件的ETag。
  let {res: {headers: {etag}}}  = await client.put('exampleobject.txt', Buffer.from('contenttest'));

  // 在请求头If-Match中传入ETag,如果传入的ETag和文件的ETag匹配,则下载文件。
  let result = await client.get("exampleobject.txt", {
    headers: {
      "If-Match": etag,
    },
  });
  console.log(result.content.toString() === "contenttest");
  console.log(result.res.status === 200);

  // 如果传入的ETag和文件的ETag不匹配,则返回412 Precondition Failed。
  try {
    await client.get("exampleobject.txt", {
      headers: {
        "If-Match": etag,
      },
    });
  } catch (e) {
    console.log(e.status === 412);
    console.log(e.code === "PreconditionFailed");
  }
}

main();

下载与指定ETag不匹配的文件

以下代码用于下载与指定ETag不匹配的文件:

const OSS = require('ali-oss');

const client = new OSS({
  // yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
  region: 'yourRegion',
  // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  // 填写Bucket名称。
  bucket: 'examplebucket'
});

async function main() {
  try {
    // 向目标Bucket上传名为exampleobject.txt的文件,并获取文件的ETag。
    let {
      res: {
        headers: { etag },
      },
    } = await client.put("exampleobject.txt", Buffer.from("contenttest"));

    // 通过在请求头If-None-Match中传入ETag,如果传入的ETag和文件的ETag不匹配,则下载文件。
    let result = await client.get("exampleobject.txt", {
      headers: {
        "If-None-Match": etag,
      },
    });
    console.log(result.content.toString() === "contenttest");
    console.log(result.res.status === 200);

    // 如果传入的ETag和文件的ETag匹配,则返回304 Not Modified。
    result = await client.get("exampleobject.txt", {
      headers: {
        "If-None-Match": etag,
      },
    });
    console.log(result.content.toString() === "");
    console.log(result.res.status === 304);
  } catch (e) {
    console.log(e.code === "Not Modified");
  }
}

main();

相关文档

关于限定条件下载的API接口说明,请参见GetObject