【问题标题】:How to download MP3 files with ASP.NET MVC 5 & Entity Framework如何使用 ASP.NET MVC 5 和实体框架下载 MP3 文件
【发布时间】:2016-07-11 22:35:52
【问题描述】:

我已成功完成上传操作 - 已将 MP3 文件上传到我的 SQL Server,但我在下载文件时需要帮助......我使用以下代码上传 MP3 文件

public ActionResult Create([Bind(Include = "ID,Artist,Album")] TrackUpload trackUpload, HttpPostedFileBase upload)
{
    try
    {
        if (ModelState.IsValid)
        {
            if (upload != null && upload.ContentLength > 0)
            {
                var song = new File
                {
                    FileName = System.IO.Path.GetFileName(upload.FileName),
                    FileType = FileType.Songs,
                    ContentType = upload.ContentType
                };
                using (var reader = new System.IO.BinaryReader(upload.InputStream))
                {
                    song.Content = reader.ReadBytes(upload.ContentLength);
                }
                trackUpload.Files = new List<File> { song };
            }
            db.TrackUploads.Add(trackUpload);
            db.SaveChanges();
            return RedirectToAction("Index");
        }
    }

    catch (RetryLimitExceededException /* dex */)
    {

        ModelState.AddModelError("", "Cant save changes.");
    }
    return View(trackUpload);
}

工作正常,这意味着文件存储在数据库中,现在我如何使用实体框架从 sql db 下载 MP3 文件

【问题讨论】:

  • 写这个实体TrackUpload.cs我想看看
  • @TetsuyaYamamoto 为您提供正确答案或答案提示。一件事如果文件很大,那么不要将它们存储为 blob 阅读有关文件流并将它们存储在 FileStream 中。

标签: c# asp.net asp.net-mvc entity-framework entity-framework-6


【解决方案1】:

要从 MVC 控制器下载 MP3 文件,请确保您已将 MIME 类型设置为 FileContentResultaudio/mp3audio/mpeg3audio/x-mpeg3(有关详细信息,请参阅 http://filext.com/file-extension/MP3)。

这是一个简单的控制器代码定义文件下载场景:

/*
 *  assume Id becomes file ID key to download
 *  this code provides simple download function by returning FileContentResult with proper MIME type
 */
public FileContentResult DownloadFile(int Id) 
{
    // assume FileContext is your file list DB context with FileName property (file name + extension, e.g. Sample.mp3)
    using (FileContext db = new FileContext())
    {
        var download = db.TrackUploads.Where(x => x.ID == Id).SingleOrDefault();
        if (download != null) 
        {
            // remove this line if you want file download on the same page
            Response.AddHeader("content-disposition", "inline; filename=" + download.FileName);
            return File(download.FileName, "audio/mp3");
        }
        else
        {
            return null;
        }
    }
}

附录

要在下载之前从文件扩展名中获取 MIME 类型,此代码部分可能有效:

if (download != null) 
{
    String mimeType = MimeMapping.GetMimeMapping(download.FileName);
    ...
    // other tasks
    ...
    return File(download.FileName, mimeType);
}

参考:view and download File from sql db using Entity FrameWork(对 MP3 扩展进行调整)

【讨论】:

  • 谢谢,您也可以帮忙处理一下 html 视图标记吗?
  • 在您的问题中显示您的剃刀标记视图,我会尝试提供帮助。我建议您使用带有下载按钮的表单,例如@using (Html.BeginForm("DownloadFile", "Controller", FormMethod.Post)) 来下载 MP3 文件。
猜你喜欢
  • 2010-09-25
  • 2015-05-31
  • 2011-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多