问题描述
需要从 APIM 直接将大文件存入Azure Storage,没看到这方面的官方文档,所以是否有这方面的实践案例,或者APIM是否支持引用SDK (如Azure Storage SDK)?
问题分析
API Management (APIM) 是一种为API 网关的实现,不适合通过APIM来直接操作存储大文件到Azure Storage中。同时,APIM作为网关,是不支持引入SDK进行代码操作的。所以也是无法使用Azure Storage SDK。
但是,Azure Storage 是支持REST API的方式来存入文件,所以可以把Storage的API作为APIM的后端服务,间接实现调用APIM服务存储文件到Azure Storage Account中。
(Source: https://docs.microsoft.com/en-us/rest/api/storageservices/put-blob)
而在APIM中配置可以通过SAS URL 来实现验权并上传文件。配置示例如下
- Frontend 的URL是 /{file name} + SAS 令牌
- Backend 的 Web Service URL是Storage URL+ 容器名称
参考资料
发送请求Policy请参考:https://docs.azure.cn/zh-cn/api-management/api-management-sample-send-request
APIM Policy表达式中允许使用的.net framework类型请参考:https://docs.azure.cn/zh-cn/api-management/api-management-policy-expressions#net-framework-types-allowed-in-policy-expressions
Azure Storage - Put Blob: https://docs.microsoft.com/en-us/rest/api/storageservices/put-blob#request-body