【问题标题】:How to return an image from a controller method?如何从控制器方法返回图像?
【发布时间】:2014-01-26 09:14:17
【问题描述】:

我想在 mp3 文件中获取 mp3 专辑,使用 TagLib。我正在使用该代码,它给出了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;
    }
}

请帮帮我

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案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 类型,检查this post在这里)。

    【讨论】:

      【解决方案2】:

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

      创建用于跟踪 mp3 文件专辑封面的 Windows 窗体应用程序。

         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 本地文件夹中。使用 (File.Copy)。现在你在 Viewr 中显示。使用图像 Src标记

      【讨论】:

        【解决方案3】:

        您可以尝试使用 Base64 转换的字符串以通过 Ajax 或常规调用获取图像

        仅供参考。 http://www.codeproject.com/Articles/201767/Load-Base64-Images-using-jQuery-and-MVC

        希望有所帮助。

        【讨论】:

        • 嗯,是的,它可能会起作用,但为什么他必须做如此复杂的事情(base64 编码)才能显示图像?
        猜你喜欢
        • 2013-01-28
        • 1970-01-01
        • 2016-02-29
        • 1970-01-01
        • 1970-01-01
        • 2012-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多