由于缺少 x-ms-blob-type,在 ADLS Gen2 中创建路径失败?
Create path in ADLS Gen2 fails because of missing x-ms-blob-type?
我使用 Azure Data Lake Storage Gen2 创建了一个 Azure 存储帐户。我想使用 REST API. While using the authorization with Shared Keys works fine, I get problems using an account 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.
的请求 returns 和以下错误消息。
<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>
事实证明,缺少的 header 是 Creation of a blob in the Blob storage 所必需的。由于 ADLS Gen2 支持这两种 API 并且都提供类似的操作,因此它将请求委托给了错误的
有没有办法在 ADLS Gen2 API 上使用 PUT 操作和 SAS 创建路径?
是的,您可以在 ADLS Gen2 API 上对 SAS 使用 PUT 操作创建路径(本例中为文件)。但是您需要执行 3 个步骤:创建一个空文件 / 将数据附加到空文件 / 刷新数据.
第一步:生成sas token后,需要调用Path - Create在ADLS Gen2中创建文件。 注意:这里的文件应该是空的,也就是说在请求中header,Content-Length
应该是0
.
请求 url 如下所示:
这里,我用工具postman测试了一下,没问题。可以在 Azure 门户中的 ADLS Gen2 上创建空文件:
第 2 步和第 3 步:
那么你应该调用 Path - Update 来 附加数据。
最后,再次调用Path - Update进行刷新数据。
如果您不知道如何使用Path - Update进行这些操作,请使用fiddler查看详细的请求信息,或者直接告诉我:)。下面是Fiddler抓取的请求截图:
顺便说一句,我建议你可以直接使用Put Blob api和sas token(但你需要指定x-ms-blob-type
在请求中 header),这只是创建文件和上传内容的一个步骤。
我使用 Azure Data Lake Storage Gen2 创建了一个 Azure 存储帐户。我想使用 REST API. While using the authorization with Shared Keys works fine, I get problems using an account 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.
的请求 returns 和以下错误消息。
<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>
事实证明,缺少的 header 是 Creation of a blob in the Blob storage 所必需的。由于 ADLS Gen2 支持这两种 API 并且都提供类似的操作,因此它将请求委托给了错误的
有没有办法在 ADLS Gen2 API 上使用 PUT 操作和 SAS 创建路径?
是的,您可以在 ADLS Gen2 API 上对 SAS 使用 PUT 操作创建路径(本例中为文件)。但是您需要执行 3 个步骤:创建一个空文件 / 将数据附加到空文件 / 刷新数据.
第一步:生成sas token后,需要调用Path - Create在ADLS Gen2中创建文件。 注意:这里的文件应该是空的,也就是说在请求中header,Content-Length
应该是0
.
请求 url 如下所示:
这里,我用工具postman测试了一下,没问题。可以在 Azure 门户中的 ADLS Gen2 上创建空文件:
第 2 步和第 3 步:
那么你应该调用 Path - Update 来 附加数据。
最后,再次调用Path - Update进行刷新数据。
如果您不知道如何使用Path - Update进行这些操作,请使用fiddler查看详细的请求信息,或者直接告诉我:)。下面是Fiddler抓取的请求截图:
顺便说一句,我建议你可以直接使用Put Blob api和sas token(但你需要指定x-ms-blob-type
在请求中 header),这只是创建文件和上传内容的一个步骤。