赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 对象存储
  4. 开发参考
  5. SDK参考
  6. Node.js
  7. 对象文件
  8. 下载文件
  9. 限定条件下载

限定条件下载

  • 下载文件
  • 发布于 2025-04-21
  • 0 次阅读
文档编辑
文档编辑

下载文件(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。

相关文章

下载到本地文件 2025-04-21 18:14

本文介绍如何将存储空间(Bucket)中的文件(Object)下载到本地文件。 示例代码 以下代码用于将examplebucke

下载到本地内存 2025-04-21 18:14

本文介绍如何将OSS文件下载到本地内存。 示例代码 以下代码用于将OSS文件下载到本地内存。

流式下载 2025-04-21 18:14

如果要下载的文件太大,或者一次性下载耗时太长,您可以通过流式下载,一次处理部分内容,直到完成文件的下载。 示例代码

范围下载 2025-04-21 18:14

如果仅需要文件(Object)中的部分数据,您可以使用范围下载,下载指定范围内的数据。 指定正常的下载范围 当您指定的范围首端和末端都在

限定条件下载 2025-04-21 18:14

下载文件(Object)时允许指定条件。满足条件则下载,不满足条件则返回错误且不下载。 下载早于指定时间修改的文件 以下代码用于下载早于

使用预签名URL下载 2025-04-21 18:14

默认情况下,OSS Bucket中的文件是私有的,仅文件拥有者可访问。您可以使用OSS Node.js SDK生成带有过期时间的GET方法预签名URL,以允许他人临时下载文件。在有效期内可多次访问,超期后需重新生成。 注意事项

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号