【问题标题】:upload file and metadata to azure blob storage from cordova client从 Cordova 客户端将文件和元数据上传到 Azure Blob 存储
【发布时间】:2019-04-23 19:25:28
【问题描述】:

我使用此示例创建了一个从我的 cordova 客户端直接上传到 azure blob 存储的工作文件: http://gauravmantri.com/2013/02/16/uploading-large-files-in-windows-azure-blob-storage-using-shared-access-signature-html-and-javascript/

到目前为止一切顺利,但我有需要添加到每个文件的自定义元数据。我可以在上传之前将元数据添加到文件中,以便在将元数据加载到 azure blob 存储时自动将其附加到文件中吗?我知道我可以在 azure 中编写一个 c# 函数来添加元数据并在成功将文件加载到 blob 存储后从我的客户端调用该函数,但是有没有更好的方法?我担心上传可能会起作用,但随后的元数据写入可能会失败,使我的文件没有元数据。

马丁

【问题讨论】:

    标签: azure cordova file-upload metadata azure-blob-storage


    【解决方案1】:

    其实很简单。提交阻止列表时,您将元数据键/值对作为请求标头的一部分传递。

    例如,假设您有 2 个元数据键/值对:key1/value1key2/value2。这就是您的提交阻止列表代码的样子:

    function commitBlockList() {
      var uri = submitUri + '&comp=blocklist';
      console.log(uri);
      var requestBody = '<?xml version="1.0" encoding="utf-8"?><BlockList>';
      for (var i = 0; i < blockIds.length; i++) {
          requestBody += '<Latest>' + blockIds[i] + '</Latest>';
      }
      requestBody += '</BlockList>';
      console.log(requestBody);
      $.ajax({
          url: uri,
          type: "PUT",
          data: requestBody,
          beforeSend: function (xhr) {
              xhr.setRequestHeader('x-ms-blob-content-type', selectedFile.type);
              xhr.setRequestHeader('Content-Length', requestBody.length);
              xhr.setRequestHeader('x-ms-meta-key1', 'value1');
              xhr.setRequestHeader('x-ms-meta-key2', 'value2');
          },
          success: function (data, status) {
              console.log(data);
              console.log(status);
          },
          error: function (xhr, desc, err) {
              console.log(desc);
              console.log(err);
          }
      });
    }
    

    有关参考,请参阅Put Block List REST API 文档:https://docs.microsoft.com/en-us/rest/api/storageservices/Put-Block-List

    【讨论】:

    • 谢谢。工作一种享受。我确实花了一段时间才意识到密钥必须以 x-ms-meta- 为前缀,所以 xhr.setRequestHeader('x-ms-meta-key1', 'value1');有效,xhr.setRequestHeader('mykey1', 'value1');没有。在天蓝色的元数据名称将是 key1
    猜你喜欢
    • 2014-11-22
    • 1970-01-01
    • 2022-12-15
    • 2016-10-27
    • 2019-02-24
    • 2015-06-13
    • 2021-03-07
    • 2017-01-24
    • 2017-08-19
    相关资源
    最近更新 更多