是否可以在不通过 headers 的情况下使用 REST API 将文件上传到 Azure 存储帐户?

Is it possible to upload files to Azure Storage Account using the REST API without passing headers?

我的问题的背景是我想编写一个自定义 API 来接收文件上传请求、验证它们、生成具有所需权限的 SAS 令牌和 returns 一个 HTTP 301 到包含 Azure 存储帐户 URI 的调用客户端以及所有必需的查询参数,例如 https://mystorage.file.core.windows.net/share/movie.avi?srt=sco&sv=2020-02-10&ss=f&sp=rwdlacup&st=2022-03-02T14:10:19Z&se=2022-03-02T15:10:19Z&sig=ABC=.

问题在于,Blob Storage REST API and the File Storage REST API 需要 HTTP headers。这反过来又需要客户端设置我想避免的设置,在最好的情况下,客户端只发送一个 PUT https://myapi.com/upload 和一些身份验证信息,并取回一个包含上传文件的所有必要参数的 URI。

另一种方法是,客户端将他的文件发送到 https://myapi.com/upload,然后 API 负责将文件上传到存储帐户。鉴于文件可能会变大,我想避免这种额外的开销,将文件直接上传到目的地并使用 API 作为验证器和 SAS 提供程序(如 this 的第二部分图形)。

Is it possible to upload files to Azure Storage Account using the REST API without passing headers?

这是不可能的。使用共享访问签名 (SAS),您可以省略一些必需的 header,但不是全部。

例如,上传 blob 时必须包含 x-ms-blob-type header.

在文件存储中上传文件时,事情变得有点复杂,因为上传文件是一个两步过程:1) 您使用 Create File 请求创建一个空文件,在这里您必须指定 x-ms-content-length 请求 header 和 2) 您使用 Put Range 请求将数据推送到此文件中,在这里您必须指定 range(或 x-ms-range)和 x-ms-write headers.