SharePoint上的图像在发布后未加载

时间:2018-02-28 04:02:49

标签: c# asp.net-mvc azure authentication sharepoint

我正在从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">

当前登录的用户显然是受信任的,因为它在转到该网址后确实有效 - 我不能在该地址中添加某种类型的参数来自动执行此操作吗?

真的很感激任何帮助。

1 个答案:

答案 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;收藏当前档案。

如果他们都有自己的安全令牌来访问应该附加到连接字符串的图像,您可能还需要根据当前用户信息传递另一个参数。