使用不带Azure SDK的REST API将流上传到Azure Blob存储

玛雅克·帕特尔(Mayank Patel)

我希望将文件以流的形式上载到Azure存储中,但我不想使用Azure SDK它,而是想使用REST APIand not 以更通用的方式来做BlobServiceClient

有办法吗?相同的参考链接可以在这里找到:

https://docs.microsoft.com/zh-cn/azure/storage/common/storage-samples-javascript?toc=/azure/storage/blobs/toc.json#blob-samples

https://github.com/Azure/azure-sdk-for-js/blob/master/sdk/storage/storage-blob/samples/javascript/advanced.js#L74

但是这里提到的链接提出了使用的解决方案Azure SDK我想没有 Azure SDK

这是代码:

const CryptoJS = require("crypto-js");
const request = require("request");
const fs = require("fs");

const account = process.env.ACCOUNT_NAME || "";
const key = process.env.ACCOUNT_KEY || "";
const containerName = "demo";
const blobName = "dummyfile.txt";
var strTime = new Date().toUTCString();

// read file to Stream
var filePath = `${__dirname}/README.md`;
const readStream = fs.createReadStream(filePath);
var stat = fs.statSync(filePath);

string_params = {
  verb: "PUT",
  "Content-Encoding": "",
  "Content-Language": "",
  "Content-Length": stat.size,
  "Content-MD5": "",
  "Content-Type": "application/octet-stream",
  Date: "",
  "If-Modified-Since": "",
  "If-Match": "",
  "If-None-Match": "",
  "If-Unmodified-Since": "",
  Range: "",
  CanonicalizedHeaders:
    "x-ms-blob-type:BlockBlob\nx-ms-date:" +
    strTime +
    "\nx-ms-version:" +
    "2020-04-08\n",
  CanonicalizedResource: `/${account}/${containerName}/${blobName}`,
};

var strToSign = `${string_params["verb"]}\n${string_params["Content-Encoding"]}\n${string_params["Content-Language"]}\n${string_params["Content-Length"]}\n${string_params["Content-MD5"]}\n${string_params["Content-Type"]}\n${string_params["Date"]}\n${string_params["If-Modified-Since"]}\n${string_params["If-Match"]}\n${string_params["If-None-Match"]}\n${string_params["If-Unmodified-Since"]}\n${string_params["Range"]}\n${string_params["CanonicalizedHeaders"]}${string_params["CanonicalizedResource"]}`;

var secret = CryptoJS.enc.Base64.parse(key);
var hash = CryptoJS.HmacSHA256(strToSign, secret);
var hashInBase64 = CryptoJS.enc.Base64.stringify(hash);
var auth = `SharedKey ${account}:` + hashInBase64;

const options = {
  url: `https://${account}.blob.core.windows.net/${containerName}/${blobName}`,
  headers: {
    Authorization: auth,
    "x-ms-blob-type": "BlockBlob",
    "x-ms-date": strTime,
    "x-ms-version": "2020-04-08",
    "Content-Type": "application/octet-stream",
    "Content-Length": stat.size,
  },
  body: readStream,
};

function callback(error, response, body) {
  console.log(response.statusCode);
  console.log(response.statusMessage);
  if (!error && response.statusCode == 200) {
    console.log(error);
    console.log(response);
    console.log(body);
  }
}

request.put(options, callback);

我得到的错误是:

TypeError: Cannot read property 'statusCode' of undefined

错误的屏幕截图

编辑:问题已由Pamela的代码解决+我发现的问题是初始化.env变量时出错

彭美玲

您可以使用Put Blob Rest API上传视频流。有一个使用node.js的示例。

const CryptoJS = require("crypto-js");
const request = require("request");
const fs = require('fs');

const account = "account-name";
const key = "account-key";
var strTime = new Date().toUTCString();

var filePath = 'your-file-path';
const readStream = fs.createReadStream(filePath);
var stat = fs.statSync(filePath);

string_params = {
    'verb': 'PUT',
    'Content-Encoding': '',
    'Content-Language': '',
    'Content-Length': stat.size,
    'Content-MD5': '',
    'Content-Type': 'application/octet-stream',
    'Date': '',
    'If-Modified-Since': '',
    'If-Match': '',
    'If-None-Match': '',
    'If-Unmodified-Since': '',
    'Range': '',
    'CanonicalizedHeaders': 'x-ms-blob-type:BlockBlob\nx-ms-date:' + strTime + '\nx-ms-version:' + '2020-04-08\n',
    'CanonicalizedResource': `/${account}/containername/myblob`
}


var strToSign = `${string_params['verb']}\n${string_params['Content-Encoding']}\n${string_params['Content-Language']}\n${string_params['Content-Length']}\n${string_params['Content-MD5']}\n${string_params['Content-Type']}\n${string_params['Date']}\n${string_params['If-Modified-Since']}\n${string_params['If-Match']}\n${string_params['If-None-Match']}\n${string_params['If-Unmodified-Since']}\n${string_params['Range']}\n${string_params['CanonicalizedHeaders']}${string_params['CanonicalizedResource']}`
console.log(strToSign);

var secret = CryptoJS.enc.Base64.parse(key);
var hash = CryptoJS.HmacSHA256(strToSign, secret);
var hashInBase64 = CryptoJS.enc.Base64.stringify(hash);
var auth = `SharedKey ${account}:` + hashInBase64;
console.log(auth)

const options = {
    url: `https://${account}.blob.core.windows.net/containername/myblob`,
    headers: {
        Authorization: auth,
        'x-ms-blob-type': 'BlockBlob',
        "x-ms-date": strTime,
        "x-ms-version": "2020-04-08",
        'Content-Type': "application/octet-stream",
        'Content-Length': stat.size
    },
    body: readStream
};

function callback(error, response, body) {
    console.log(response.statusCode);
    console.log(response.statusMessage);
    if (!error && response.statusCode == 200) {
        console.log(error);
        console.log(response);
        console.log(body);
    }
}

request.put(options, callback);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用REST API和C#将PDF文件上传到Azure Blob存储(不使用任何AZURE STORAGE SDK)

来自分类Dev

如何使用Python SDK将大文件(〜100mb)上传到Azure blob存储?

来自分类Dev

如何使用python sdk将字符串直接上传到Azure存储Blob?

来自分类Dev

如何使用Python SDK将大文件(〜100mb)上传到Azure Blob存储?

来自分类Dev

Azure存储,使用不带CloudBlobClient的BlobRequestOptions

来自分类Dev

是否可以在不预先指定流长度的情况下将流上传到Azure blob存储?

来自分类Dev

手动将文件上传到Azure Blob存储

来自分类Dev

将异步上传到Azure Blob存储永远不会返回

来自分类Dev

将文件上传到Azure Blob存储中

来自分类Dev

如何将VHD并行上传到Azure BLOB存储?

来自分类Dev

如何从Azure的Blob存储将数据上传到Jupyter Notebook?

来自分类Dev

使用REST API将文件上传到Firebase存储

来自分类Dev

使用 SDK 在 azure 函数中将 Azure blob 存储到 JSON

来自分类Dev

通过Web API将文件上传到Azure文件存储

来自分类Dev

通过Web API将文件上传到Azure文件存储

来自分类Dev

使用 Javascript 上传到 Azure blob 存储失败?

来自分类Dev

使用SAS和REST上传到Azure Blob

来自分类Dev

如何使用Python将文件夹递归上传到Azure Blob存储

来自分类Dev

使用BlobContainerClient通过Blob存储将大量文件上传到Azure

来自分类Dev

如何使用C#将数据表上传到Azure Blob存储?

来自分类Dev

Azure Powershell - 如何使用“只写”共享访问签名 (SAS) 将文件上传到 Blob 存储?

来自分类Dev

将图片从流上传到Blob存储(在Python中)

来自分类Dev

Azure Blob存储REST API:为什么“获取Blob属性”和“获取Blob”请求相同?

来自分类Dev

通过PHP获取刚刚上传到Azure存储的Blob的URL

来自分类Dev

从SAS URL上传到Azure Blob存储返回404状态

来自分类Dev

通过PHP获取刚刚上传到Azure存储的Blob的URL

来自分类Dev

将文件上传到Azure文件存储

来自分类Dev

将文件从客户端上传到Azure Blob存储| MVC

来自分类Dev

将文件从 angular 应用程序上传到 azure 函数,然后坚持到 blob 存储

Related 相关文章

  1. 1

    使用REST API和C#将PDF文件上传到Azure Blob存储(不使用任何AZURE STORAGE SDK)

  2. 2

    如何使用Python SDK将大文件(〜100mb)上传到Azure blob存储?

  3. 3

    如何使用python sdk将字符串直接上传到Azure存储Blob?

  4. 4

    如何使用Python SDK将大文件(〜100mb)上传到Azure Blob存储?

  5. 5

    Azure存储,使用不带CloudBlobClient的BlobRequestOptions

  6. 6

    是否可以在不预先指定流长度的情况下将流上传到Azure blob存储?

  7. 7

    手动将文件上传到Azure Blob存储

  8. 8

    将异步上传到Azure Blob存储永远不会返回

  9. 9

    将文件上传到Azure Blob存储中

  10. 10

    如何将VHD并行上传到Azure BLOB存储?

  11. 11

    如何从Azure的Blob存储将数据上传到Jupyter Notebook?

  12. 12

    使用REST API将文件上传到Firebase存储

  13. 13

    使用 SDK 在 azure 函数中将 Azure blob 存储到 JSON

  14. 14

    通过Web API将文件上传到Azure文件存储

  15. 15

    通过Web API将文件上传到Azure文件存储

  16. 16

    使用 Javascript 上传到 Azure blob 存储失败?

  17. 17

    使用SAS和REST上传到Azure Blob

  18. 18

    如何使用Python将文件夹递归上传到Azure Blob存储

  19. 19

    使用BlobContainerClient通过Blob存储将大量文件上传到Azure

  20. 20

    如何使用C#将数据表上传到Azure Blob存储?

  21. 21

    Azure Powershell - 如何使用“只写”共享访问签名 (SAS) 将文件上传到 Blob 存储?

  22. 22

    将图片从流上传到Blob存储(在Python中)

  23. 23

    Azure Blob存储REST API:为什么“获取Blob属性”和“获取Blob”请求相同?

  24. 24

    通过PHP获取刚刚上传到Azure存储的Blob的URL

  25. 25

    从SAS URL上传到Azure Blob存储返回404状态

  26. 26

    通过PHP获取刚刚上传到Azure存储的Blob的URL

  27. 27

    将文件上传到Azure文件存储

  28. 28

    将文件从客户端上传到Azure Blob存储| MVC

  29. 29

    将文件从 angular 应用程序上传到 azure 函数,然后坚持到 blob 存储

热门标签

归档