如何从控制器方法返回图像?

时间:2014-01-08 10:22:05

标签: c# asp.net-mvc

我想使用TagLib在mp3文件中使用mp3 albumart。我正在使用该代码,它提供System.Drawing.Bitmap。如何在网页中显示。我正在使用MVC。

var file12 = TagLib.File.Create(file);

if (file12.Tag.Pictures.Length >= 1)
{
    var bin = (byte[])(file12.Tag.Pictures[0].Data.Data);
    if (bin.Length > 0)
    {
        Images = System.Drawing.Image.FromStream(new MemoryStream(bin)).GetThumbnailImage(200, 200, null, IntPtr.Zero);
        album = file12.Tag.Album;
    }
}

请帮帮我

3 个答案:

答案 0 :(得分:1)

只需将该代码放入控制器方法中,图像将异步加载(在此示例中,控制器方法接受文件名作为参数,可能不是您的情况):

public ActionResult GetImage(string file)
{
    var file12 = TagLib.File.Create(file);
    if (file12.Tag.Pictures.Length >= 1)
    {
        string fileName = Path.ChangeExtension(
            Path.GetFileName(file), ".jpg");

        return base.File(
            (byte[])(file12.Tag.Pictures[0].Data.Data),
            "image/jpeg", fileName);
    }

    // You have to handle this case
    return null;
}

Controller.File()方法将为您完成所有脏工作。为了清楚起见,在这个例子中我省略了重新缩放,只是复制&如果需要,将代码粘贴到那里。请注意,如果没有可用的图像(默认缩略图?),您必须返回一些内容,甚至可能会返回HTTP错误:

return HttpNotFound();

您的HTML将是这样的:

<img
     src='@Url.Action("GetImage", new { file = "filenamehere.mp3" })'
     alt='thumbnail' />

请注意,这里我假设您的图像是JPG格式,如果不是,您可能需要将其转换为已知格式以返回正确的MIME类型(从字节流中检测MIME类型也是可能的,请检查{{3在这里SO)。

答案 1 :(得分:0)

您可以尝试使用Base64转换后的字符串来获取带有Ajax的图像或常规调用

FYI。 http://www.codeproject.com/Articles/201767/Load-Base64-Images-using-jQuery-and-MVC

希望有所帮助。

答案 2 :(得分:0)

我选择另一个选项来显示Mp3文件的AlbumArt。

创建Windows表单应用程序以跟踪mp3文件相册艺术。

   var filename = TagLib.File.Create(file);
                        if (filename.Tag.Pictures.Length >= 1)
                        {
                            var bin = (byte[])(filename.Tag.Pictures[0].Data.Data);
                            if (bin.Length > 0)
                            {
                                Images = Image.FromStream(new MemoryStream(bin)).GetThumbnailImage(800, 800, null, IntPtr.Zero);
                                PreviewPictureBox.Image = Images;
                                PreviewPictureBox.Image.Save("C:/Users/v-manshr/Desktop/MyMusicPlayer/MyMusicPlayer/AlbumImage/"+filename.Tag.Album+".jpg");
                                PreviewPictureBox.Visible = false;
                            }
                        }

这里的PreviewPictureBox是一个WindwosFormComtrol。

现在我有一个mp3文件专辑封面,保存在一个位置。现在在MVC控制器中我将所有文件复制到我的Visual Studio Local Folders.Using(File.Copy)。现在你在Viewr中显示。使用Image Src标签