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

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

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

// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
const accessKeyId = "yourAccessKeyId";
const accessKeySecret = "yourAccessKeySecret";
// 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
const endpoint = "yourEndpoint";
// 填写目标Bucket名称。
const bucket = "yourBucketName";

async function main() {
 // 向目标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);  
console.log(e.code === "Not Modified");
}

main();

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

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

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

// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
const accessKeyId = "yourAccessKeyId";
const accessKeySecret = "yourAccessKeySecret";
// 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
const endpoint = "yourEndpoint";
// 填写目标Bucket名称。
const bucket = "yourBucketName";

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

main();

下载与指定ETag匹配的文件

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

// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
const accessKeyId = "yourAccessKeyId";
const accessKeySecret = "yourAccessKeySecret";
// 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
const endpoint = "yourEndpoint";
// 填写目标Bucket名称。
const bucket = "yourBucketName";

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不匹配的文件:

// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
const accessKeyId = "yourAccessKeyId";
const accessKeySecret = "yourAccessKeySecret";
// 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
const endpoint = "yourEndpoint";
// 填写目标Bucket名称。
const bucket = "yourBucketName";

async function main() {
  // 向目标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);
console.log(e.code === "Not Modified");
}

main();