ASP.NET MVC:检索.mp3文件并将其返回给用户

本文关键字:返回 给用户 文件 mp3 NET MVC 检索 ASP | 更新日期: 2023-09-27 17:56:42

我目前有一个包含链接的HTML页面:

<a href="javascript:void()" onclick="return getAudioFile('fileLocation');">Listen</a>

单击"收听"链接调用此函数:

    function getRecordingFile(fileLocation) {
    };

最终应该调用此控制器方法:

    [HttpPost]
    public ActionResult GetAudioFile(string fileLocation)
    {
        return null;
    }

我已经清空了函数和方法,因为我尝试了几种不同的方式来实现这一目标:我需要从本地位置访问音频文件,并允许用户在单击Listen链接时收听/下载它。

这似乎是最好的方法是什么?

ASP.NET MVC:检索.mp3文件并将其返回给用户

以下是最终结果:

    [HttpGet]
    public ActionResult GetAudioFile(string fileLocation)
    {
        var bytes = new byte[0];

        using (var fs = new FileStream(fileLocation, FileMode.Open, FileAccess.Read)
        {
            var br = new BinaryReader(fs);
            long numBytes = new FileInfo(fileLocation).Length;
            buff = br.ReadBytes((int)numBytes);
        }
        return File(buff, "audio/mpeg", "callrecording.mp3");
    }

在页面上,链接是:

<a href="/Controller/GetAudioFile?fileName=@fileLocation">Listen</a>
感谢

我的老板的帮助。

也许使用文件结果?

 [HttpPost]
 public FileResult GetAudioFile(string fileLocation)
 {
    using(FileStream fs = new FileStream(fileLocation)){
       return File(fs.ToArray(), "audio/mpeg");
    }
 }

其他答案不会启用部分内容,因此用户无法搜索。

在继续之前,还应确保攻击者无法通过提供../../file或类似路径来遍历文件系统

    [HttpGet]
    public ActionResult GetAudioFile(string fileLocation)
    {
        using var fs = new FileStream(fileLocation, FileMode.Open, FileAccess.Read);
        using var br = new BinaryReader(fs);
        long numBytes = new FileInfo(fileLocation).Length;
        var buff = br.ReadBytes((int)numBytes);
        var fileResult = File(buff, "audio/mpeg", "callrecording.mp3");
        fileResult.EnableRangeProcessing = true;
        return fileResult;
    }