从Cordova客户端上传文件和元数据到Azure Blob存储

时间:2018-11-21 09:01:54

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

我已使用此示例从我的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存储中后从客户端调用该函数,但是有更好的方法吗?我担心上传可能会起作用,但是随后的元数据写入可能会失败,从而使我的文件中没有元数据。

马丁

1 个答案:

答案 0 :(得分: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