如何从控制器方法返回图像?
我想使用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; } }
请帮我
只需将该代码放在控制器方法中,图像将异步加载(在此示例中,控制器方法接受文件名作为参数,可能不是您的情况):
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将是这样的:
请注意,这里我假设您的图像是JPG格式,如果不是您可能需要将其转换为已知格式以返回正确的MIME类型(也可以从字节流中检测MIME类型,请在此处查看此post ) 。
您可以尝试使用Base64转换的字符串来获取带有Ajax的图像或常规调用
仅供参考。 http://www.codeproject.com/Articles/201767/Load-Base64-Images-using-jQuery-and-MVC
希望有所帮助
我有选择另一个选项来显示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.using Image Src标签中显示