我再次提出问题..
我想从存储在azure blob存储中的文件中提取图标。
动作:
public FileResult GetUploadedFileIcon(string blobname)
{
string SASURI = GetUploadedFileIconSASURL(blobname);
Icon stream = System.Drawing.Icon.ExtractAssociatedIcon(SASURI);
Bitmap pngIcon = stream.ToBitmap();
MemoryStream ms = new MemoryStream();
pngIcon.Save(ms, ImageFormat.Png);
ms.Position = 0;
return new FileStreamResult(ms, "image/png");
}
查看:
<img src="@Url.Action("GetUploadedFileIcon", "Home", new { blobname = file.BlobName })" />
问题:
它告诉我图标流为空。 SASURI没有任何问题。我尝试完全删除它并使用公共容器,但这没有帮助。 我也尝试从本地存储的文件中获取图标,如下所示:
Icon stream = System.Drawing.Icon.ExtractAssociatedIcon(@"C:\WINDOWS\system32\notepad.exe");
这有效..
所有blob的内容类型都是正确的,textfiles是text / plain等。
当我尝试从blob中提取图标时,为什么我的图标会显示空值?
我一如既往地感谢所有帮助!
由于
更新
在这里找到解决方案:
链接:ExtractAssociatedIcon returns null
但由于某些原因,我现在没有在我的视图中找到任何图标(?)
我的代码:
[DllImport("shell32.dll")]
static extern IntPtr ExtractAssociatedIcon(IntPtr hInst,
StringBuilder lpIconPath, out ushort lpiIcon);
public FileResult GetUploadedFileIcon(string blobname)
{
string SASURI = GetUploadedFileIconSASURL(blobname);
ushort uicon;
StringBuilder strB = new StringBuilder(SASURI);
IntPtr handle = ExtractAssociatedIcon(IntPtr.Zero, strB, out uicon);
Icon ico = Icon.FromHandle(handle);
Bitmap pngIcon = ico.ToBitmap();
MemoryStream ms = new MemoryStream();
pngIcon.Save(ms, ImageFormat.Png);
ms.Position = 0;
return new FileStreamResult(ms, "image/png");
}