0

我使用 Azure Data Lake Storage Gen2 创建了一个 Azure 存储帐户。我想使用REST API上传文件。虽然使用共享密钥授权工作正常,但我在使用帐户 SAS时遇到问题。

对于路径创建,我使用Path - Create操作。

# provide Azure Data Lake Storage Gen2 URL as environment variable
$ ADLS_URL="https://xxxxx.blob.core.windows.net/files"

# provide account SAS as environment variable
$ SAS="sv=2017-07-29&ss=bf&..."

# Create a new path in ADLS Gen2
$ curl -vX PUT -H "Content-Length: 112" "$ADLS_URL/example.txt?resource=file&$SAS" 

请求返回400 An HTTP header that's mandatory for this request is not specified.以下错误消息。

<Error>
  <Code>MissingRequiredHeader</Code>
  <Message>An HTTP header that's mandatory for this request is not specified. RequestId:870e754b-... Time:2020-07-07T...</Message>
  <HeaderName>x-ms-blob-type</HeaderName>
</Error>

事实证明,在 Blob 存储中创建 Blob需要缺少的标头。由于 ADLS Gen2 支持这两种 API 并且都提供类似的操作,因此它将请求委托给错误的 API。

有没有办法在 ADLS Gen2 API 上使用 PUT 操作和 SAS 创建路径?

4

1 回答 1

1

是的,您可以在 ADLS Gen2 API 上使用带有 SAS 的 PUT 操作创建路径(本示例中的文件)。但是您需要采取 3 个步骤:创建一个空文件/将数据附加到空文件/刷新数据

第一步:生成sas token后,需要调用Path-Create在ADLS Gen2中创建文件。注意:这里的文件应该是空的,这意味着在请求头中,Content-Length应该是0.

请求网址如下所示:

https://xxx.dfs.core.windows.net/aaa/myfile999.txt?resource=file&sv=2019-10-10&ss=bfqt&srt=sco&sp=rwdlacupx&se=2020-07-08T10:31:37Z&st=2020-07- 08T02:31:37Z&spr=https&sig=xxxx

在这里,我使用postman工具对其进行了测试,它可以正常工作。可以在 Azure 门户中的 ADLS Gen2 上创建空文件:

在此处输入图像描述

第 2 步和第 3 步:

那么你应该调用Path-Update追加数据

最后,再次调用Path-Update刷新数据

如果您不知道如何使用Path - Update进行这些操作,请使用 fiddler 查看详细的请求信息,或者直接告诉我:)。这是 Fiddler 捕获的请求的屏幕截图:

在此处输入图像描述

顺便说一句,我建议您可以直接使用带有sas 令牌的Put Blob api(但您需要在请求标头中指定),这只是创建文件和上传内容的一个步骤。x-ms-blob-type

于 2020-07-08T06:07:30.090 回答