我正在从SharePoint检索用户个人资料图片,然后在页面上显示这些用户,将src
元素中的img
属性设置为图片的网址。
在VS中调试时效果很好。
但是,在我发布到Azure后,图像未加载。奇怪的是,在我点击图片的链接后,它似乎验证了我,然后图像DO开始加载......
如何自动传递当前用户凭据,以便我的用户在Web应用程序中查看之前不必导航到图像本身?
元素的例子:
<img src="https://companyname-my.sharepoint.com:443/User%20Photos/Profile%20Pictures/firstname_lastname_company_com_MThumb.jpg?t=63655312814" class="userPic">
当前登录的用户显然是受信任的,因为它在转到该网址后确实有效 - 我不能在该地址中添加某种类型的参数来自动执行此操作吗?
真的很感激任何帮助。
答案 0 :(得分:1)
使用Azure存储,如果图像已保存为私有,则需要共享访问权限。
对于我自己网站上的任何图片,我都有类似下面的课程:
public string GetAzureStoreImage(string fileName, string containerName)
{
string imageUrl = string.Empty;
// Connect to cloud storage account
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("YourStoredConnectionString"));
// Connect blob client
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
// Connect to container
CloudBlobContainer container = blobClient.GetContainerReference(containerName);
// Get reference for current file
CloudBlockBlob blob = container.GetBlockBlobReference(fileName);
if (blob.Exists())
{
// Create access token for file share
var sasToken = blob.GetSharedAccessSignature(new SharedAccessBlobPolicy()
{
Permissions = SharedAccessBlobPermissions.Read,
SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(10),
}, new SharedAccessBlobHeaders()
{
ContentDisposition = "attachment; filename=" + fileName
});
// Collect url and download file
imageUrl = string.Format("{0}{1}", blob.Uri, sasToken);
}
return imageUrl;
}
您需要为它们包含Microsoft.WindowsAzure.Storage和Microsoft.WindowsAzure.Storage.Blob引用,但这将提供一个临时的10分钟令牌来访问该文件,然后该文件将允许返回的&#34; imageurl& #34;成为你的图像来源。
最后,fileName只是您要从Azure存储中收集的文件名,而containerName是&#34; bucket&#34;收藏当前档案。
如果他们都有自己的安全令牌来访问应该附加到连接字符串的图像,您可能还需要根据当前用户信息传递另一个参数。