AZURE从blob网址中提取图标

时间:2014-06-10 13:17:31

标签: asp.net-mvc azure

我再次提出问题..

我想从存储在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");
    }

0 个答案:

没有答案