【问题标题】:Error using loopback-storage-component to upload/download files to azure storage使用 loopback-storage-component 将文件上传/下载到 Azure 存储时出错
【发布时间】:2017-04-11 05:33:19
【问题描述】:

我正在使用 LoopBack 存储组件将文件上传和下载到 Azure 云存储,如他们的documentation 所示
我在 model-config.json 中创建了名为 container 的模型

 "container": {
    "dataSource": "storage",
    "public": true
  }

datasouce.json 中的数据源

"storage": {
    "name": "storage",
    "connector": "loopback-component-storage",
    "provider": 'azure',
    "storageAccount": "xxxxx",
    "storageAccessKey": "xxxx"
  }

现在我有一个 REST API,如他们的文档中所述。这是我每次调用生成的 GET /api/containers 端点之一时遇到的错误。

{
  "error": {
    "name": "Error",
    "status": 400,
    "message": "azure Error (400): Bad Request",
    "provider": "azure",
    "failCode": "Bad Request",
    "statusCode": 400,
    "href": "http://xxxx.blob.core.windows.net/?comp=list",
    "method": "GET",
    "headers": {
      "content-type": "application/xml",
      "server": "Microsoft-HTTPAPI/2.0",
      "x-ms-request-id": "820995fc-0001-013e-7b9a-48de28000000",
      "date": "Sun, 27 Nov 2016 10:40:02 GMT",
      "cache-control": "proxy-revalidate",
      "content-length": "328",
      "connection": "close"
    },
    "result": {
      "err": "<?xml version=\"1.0\" encoding=\"utf-8\"?><Error><Code>InvalidHeaderValue</Code><Message>The value for one of the HTTP headers is not in the correct format.\nRequestId:820995fc-0001-013e-7b9a-48de28000000\nTime:2016-11-27T10:40:02.3522933Z</Message><HeaderName>x-ms-version</HeaderName><HeaderValue>2011-08-18</HeaderValue></Error>"
    }
  }
}

搜索此错误后,我发现 this 回答我的问题是我是否必须手动设置标头以及如何设置,或者缺少环回存储组件的天蓝色存储配置。

我将这段代码添加到 common/models/container.js 中,我得到了同样的错误。

module.exports = function(Container) {
  Container.beforeRemote('**', function(context, user, next) {
    //2015-12-11
    context.res.set('x-ms-version', '2015-12-11');
    next();
  });
};

【问题讨论】:

  • 尝试先手动设置标题并更新您的问题
  • 通过REST API,授权日期(或x-ms-date到指定帐户下的list the containers >) 和 x-ms-version 应该在请求标头中是必需的。请使用 Fiddler 检查请求头和实际值。

标签: node.js azure azure-blob-storage loopbackjs strongloop


【解决方案1】:

我已经在 model-config.jsondatasouce.json 中测试了具有相同配置的 example-2.0,它在我这边运行良好,无需任何其他配置或额外的代码修改。

您能否提供有关您正在使用的环境和 sdk 版本的更多详细信息。您可以尝试更新您的依赖项,我的测试中的依赖项是:

"dependencies": {
    "compression": "^1.0.3",
    "errorhandler": "^1.1.1",
    "loopback": "^2.0.0",
    "loopback-boot": "^2.0.0",
    "loopback-component-explorer": "^2.1.0",
    "loopback-component-storage": "^1.5.0",
    "loopback-datasource-juggler": "^2.7.0",
    "serve-favicon": "^2.0.1"
  }

最后你可以尝试修改pkgcloud的源代码在https://github.com/pkgcloud/pkgcloud/blob/master/lib/pkgcloud/azure/utils/constants.js#L2048处将2011-08-18改为2015-12-11

如有任何疑问,请随时告诉我。

【讨论】:

  • 我已经使用我的配置尝试了 example-2.0 项目并更改了 package.json 中的依赖项。这是我的依赖项"dependencies": { "compression": "^1.0.3", "errorhandler": "^1.1.1", "loopback": "^2.22.0", "loopback-boot": "^2.6.5", "loopback-component-explorer": "^2.4.0", "loopback-component-storage": "^1.10.0", "loopback-datasource-juggler": "^2.39.0", "serve-favicon": "^2.0.1" }
【解决方案2】:

问题出在存储部署类型上。我使用 Azure 经典部署模型创建了存储,但是当我将部署模型更改为“Azure 资源管理器”时,它运行良好。区别可以在here找到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 2014-08-08
    • 2018-02-16
    相关资源
    最近更新 更多