从 cordova 客户端将文件和元数据上传到 azure blob 存储
upload file and metadata to azure blob storage from cordova client
我已经使用这个示例创建了一个工作文件,从我的 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 存储后从我的客户端调用该函数但是有更好的方法吗?我担心上传可能有效,但随后的元数据写入可能会失败,从而使我的文件没有元数据。
马丁
其实很简单。当您提交阻止列表时,您将元数据 key/value 对作为请求 headers 的一部分传递。
例如,假设您有 2 个元数据 key/value 对:key1/value1
和 key2/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
我已经使用这个示例创建了一个工作文件,从我的 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 存储后从我的客户端调用该函数但是有更好的方法吗?我担心上传可能有效,但随后的元数据写入可能会失败,从而使我的文件没有元数据。
马丁
其实很简单。当您提交阻止列表时,您将元数据 key/value 对作为请求 headers 的一部分传递。
例如,假设您有 2 个元数据 key/value 对:key1/value1
和 key2/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