我使用azure的GETFILE()服务创建了一个方法。参考:https://docs.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检索的相应图像。我怎样才能做到这一点?
答案 0 :(得分:1)
在回答你的问题之前,我要做一些事情:
假设您使用Blob存储,您可以执行以下操作:
Blob
或Container
(即容器中的blob是公开可用的),则只需返回blob&#39 ; s响应中的URL(上面代码中的请求URL相同),然后在应用程序中创建一个链接,并将href设置为此URL。Private
(即blob不公开),则需要在该Blob上创建一个Shared Access Signature (SAS)
令牌,且权限至少为Read
,然后创建一个SAS URL。 SAS网址只是blob URL + SAS token
,并在您的回复中返回此SAS网址,然后在您的应用中创建一个链接,并将href设置为此网址。由于Azure文件共享始终是私有的,如果您使用Azure文件服务来提供文件,您将执行与上面列出的第二个选项相同的操作。您将在文件上创建至少具有Read
权限的SAS令牌,然后在响应中返回SAS URL,然后在应用程序中创建一个链接,并将href设置为此URL。
要阅读有关共享访问签名的信息,您可能会发现此链接很有用:https://docs.microsoft.com/en-us/azure/storage/common/storage-dotnet-shared-access-signature-part-1。
要使用REST API创建共享访问签名,您可能会发现此链接很有用:https://docs.microsoft.com/en-us/rest/api/storageservices/Constructing-a-Service-SAS?redirectedfrom=MSDN