3

Cloudflare's R2 has an extension that prevents a NoSuchBucket error, by creating the bucket if it does not exist. To enable it, you're supposed to add a cf-create-bucket-if-missing: true header on the PutObject request. Can this header be set if we're using the @aws-sdk/client-s3 npm package? If so, how?

If the answer is no, is there an alternative workaround that you would recommend?

If it helps, I'm creating a backend nestjs API, and would like to include this header in outgoing requests.

ambiguous58
  • 1,241
  • 1
  • 9
  • 18

1 Answers1

3

The AWS SDK v2 allows you to modify requests via Middleware.

Here’s an example of adding a custom header using middleware:

const client = new S3({ region: "us-east-1" });

client.middlewareStack.add(
  (next, context) => (args) => {
    args.request.headers["cf-create-bucket-if-missing"] = "true";
    return next(args);
  },
  {
    step: "serialize",
  }
);

const params = {}; // TODO: fill in usual PutObject params

await client.PutObject(params);

There's a good article that dives into the middleware stack here.

jarmod
  • 71,565
  • 16
  • 115
  • 122
  • 1
    Thank you. The only thing I had to change was to set the middleware in the `serialize` step, rather than `build`. While both work for PutObject, the latter would cause my GetObject presigned url's to return a `SignatureDoesNotMatch` Error. – ambiguous58 Aug 09 '22 at 17:14