C# 发布后未加载SharePoint上的图像
我正在从SharePoint检索用户配置文件图片,然后在页面上显示这些用户,将C# 发布后未加载SharePoint上的图像,c#,asp.net-mvc,azure,authentication,sharepoint,C#,Asp.net Mvc,Azure,Authentication,Sharepoint,我正在从SharePoint检索用户配置文件图片,然后在页面上显示这些用户,将img元素中的src属性设置为图像的url 在VS中调试时,它可以完美地工作 但是,在我发布到Azure之后,图像不会加载。奇怪的是,在我点击图片链接后,它似乎对我进行了身份验证,然后图片开始加载 我怎样才能自动传递当前用户的凭据,这样我的用户就不必在web应用程序中看到他们之前导航到图像本身 元素的示例: <img src="https://companyname-my.sharepoint.com:443/U
img
元素中的src
属性设置为图像的url
在VS中调试时,它可以完美地工作
但是,在我发布到Azure之后,图像不会加载。奇怪的是,在我点击图片链接后,它似乎对我进行了身份验证,然后图片开始加载
我怎样才能自动传递当前用户的凭据,这样我的用户就不必在web应用程序中看到他们之前导航到图像本身
元素的示例:
<img src="https://companyname-my.sharepoint.com:443/User%20Photos/Profile%20Pictures/firstname_lastname_company_com_MThumb.jpg?t=63655312814" class="userPic">
当前登录的用户显然是受信任的,因为它在访问该url后会工作-我不能向该地址添加某种参数以自动执行吗
非常感谢您的帮助。对于Azure存储,如果图像已保存为私有,则需要sharedaccesssignature 对于我自己网站上的任何图片,我都有一个如下的类:
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分钟的令牌来访问该文件,然后允许返回的“imageurl”作为您的图像源
最后,文件名就是您希望从Azure存储中收集的文件名,containerName是当前文件的“存储桶”
如果所有用户都有自己的安全令牌来访问图像,那么您可能还需要根据当前用户信息传入另一个参数,这些图像应该附加到您的连接字符串中。谢谢您的回答。如何获取该连接字符串?它在azure门户中可用吗?是的,因此您可以对连接字符串执行两个选项,您可以在函数本身中解析它(通常是不好的做法),并且看起来像:const string ConnectionString=“DefaultEndpointsProtocol=https;AccountName=account name;AccountKey=account key”;取自或取决于您的IDE,您可以将您的存储帐户作为连接服务添加到您的项目中(当您添加服务时,有一个特定的选项可以直接连接到您的Azure存储帐户)。谢谢rando,我还有一个关于“bucket”和“filename”的问题。我只有图像的url-它包含这两个元素吗?嘿@Bassie这个url让事情变得棘手,Azure服务的工作方式更像是一个文件服务器(有点像你的windows文件浏览器),其中bucketName是你的文件夹结构(或者像你的c:等等),而你的文件名就是文件本身。如果您的url包含文件名,您可以进行字符串提取,只提取文件位置并将其推入其中。你需要找到你的bucketname,如果你只有一个bucketname,那么你可以在函数中硬设置它,而不是传入它。你的文件名将是用户%20Photos/Profile%20Pictures/firstname\u lastname\u company\u com\u MThumb.jpg(基于上面问题中的链接),因此,您需要将文件名拆分为仅提取字符串的该部分。