gpt4 book ai didi

rest - 在外部系统+ REST API中显示来自Azure的文件服务的图像

转载 作者:行者123 更新时间:2023-12-03 05:52:22 24 4
gpt4 key购买 nike

我使用 azure 的 GETFILE() 服务创建了一个方法。引用:https://learn.microsoft.com/en-us/rest/api/storageservices/get-file

  public void getImage(){
string storageKey = 'xxxxStorageKeyxxx';
string storageName = '<storageName>';
Datetime dt = Datetime.now();
string formattedDate = dt.formatGMT('EEE, dd MMM yyyy HH:mm:ss')+ ' GMT';
string CanonicalizedHeaders = 'x-ms-date:'+formattedDate+'\nx-ms-version:2016-05-31';
string CanonicalizedResource = '/' + storageName + '/<shareName>/<dirName>/<File Name>\ntimeout:20';
string StringToSign = 'GET\n\n\n\n\napplication/octet-stream\n\n\n\n\n\n\n' + CanonicalizedHeaders+'\n'+CanonicalizedResource;

Blob temp = EncodingUtil.base64Decode(storageKey);
Blob hmac = Crypto.generateMac('HmacSHA256',Blob.valueOf(StringToSign),temp ); //StringToSign
system.debug('oo-'+EncodingUtil.base64Encode(hmac));
HttpRequest req = new HttpRequest();
req.setMethod('GET');
req.setHeader('x-ms-version','2016-05-31' );
req.setHeader('x-ms-date', formattedDate);
req.setHeader('content-type','application/octet-stream');
string signature = EncodingUtil.base64Encode(hmac);
string authHeader = 'SharedKey <storageName>'+':'+signature;

req.setHeader('Authorization',authHeader);
req.setEndpoint('https://<storageName>.file.core.windows.net/<shareName>/<dirName>/<file Name>?timeout=20');

Http http = new Http();
HTTPResponse res;
res = http.send(req);
}

以上工作正常,并给出 200 作为响应代码。但是,我的主要目标是显示/下载我通过 REST API 检索到的相应图像。我怎样才能实现这一目标?

最佳答案

在回答你的问题之前先说几件事:

  • 文件存储并不真正适合您想要完成的任务(尽管这是可能的)。
  • 您应该考虑使用 Blob 存储,因为 Blob 存储更适合这种场景。

假设您使用 Blob 存储,您可以执行以下操作:

  • 如果 Blob 容器(相当于文件存储中的共享)的 ACL 为 BlobContainer(即容器中的 Blob 是公开可用的),您可以只需在响应中返回 blob 的 URL(与上面代码中的请求 URL 相同),然后在应用程序中创建一个链接,并将 href 设置为该 URL。
  • 如果 Blob 容器的 ACL 为私有(private)(即 Blob 不公开),您需要在该容器上创建一个共享访问签名 (SAS) token blob 至少具有读取 权限,然后创建 SAS URL。 SAS URL 就是blob URL + SAS token ,并在您的响应中返回此 SAS URL,然后在您的应用程序中创建一个链接,并将 href 设置为该 URL。

由于 Azure 文件共享始终是私有(private)的,因此如果您要使用 Azure 文件服务来提供文件,则需要执行与上面列出的第二个选项相同的操作。您将在至少具有读取权限的文件上创建 SAS token ,然后在响应中返回 SAS URL,然后在应用程序中创建一个链接,并将 href 设置为该 URL。

要了解共享访问签名,您可能会发现此链接很有帮助:https://learn.microsoft.com/en-us/azure/storage/common/storage-dotnet-shared-access-signature-part-1

要使用 REST API 创建共享访问签名,您可能会发现此链接很有帮助:https://learn.microsoft.com/en-us/rest/api/storageservices/Constructing-a-Service-SAS?redirectedfrom=MSDN

关于rest - 在外部系统+ REST API中显示来自Azure的文件服务的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46216172/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com