Search code examples
file-uploadgoogle-cloud-storagegoogle-cloud-platformmultipart

Storage multipart upload with custom metadata not adding metadata


I'm constructing a multipart/related upload request, as described here, with some custom object metadata in the request body. The upload is successful but the custom metadata fields are not being set.

The request body looks like:

--===============5679188666781658153==
Content-Type: application/json; -charset="utf-8"
MIME-Version: 1.0

{"x-goog-meta-local-path": "./images/02-05-2017/2017-02-05T14:33:30.364112.jpg", "x-goog-meta-capture-ds": "2017-02-05T14:33:30.364112", "name": "0/02-05-2017/2017-02-05T14:33:30.364112.jpg"}
--===============5679188666781658153==
Content-Type: image/jpeg
MIME-Version: 1.0
Content-Transfer-Encoding: base64

<Image Data>

--===============5679188666781658153==--

From my understanding I should be able to arbitrarily set metadata key:value pairs as long as the keys are prefixed with x-goog-meta-*.

Am I missing something? How can I persist the custom metadata to the object using a multipart upload?


Solution

  • I found the answer in this related question: Google Storage API custom header on node.js

    As jterrace points out:

    Take a look at the JSON request builder here: https://developers.google.com/storage/docs/json_api/v1/objects/insert

    You'll notice that metadata is a separate key in the body. So you'll want something like:

    var metadata = {
        name: "name"
        contentLanguage: "en",
        metadata: {
          "something": "completely different",
        },
        acl: [...]
    };