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

rjee0c15  于 2023-02-11  发布在  jQuery
关注(0)|答案(3)|浏览(131)

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

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

单击“Listen”链接调用此函数:

function getRecordingFile(fileLocation) {

    };

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

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

我已经清空了函数和方法,因为我已经尝试了几种不同的方法来实现这一点:我需要从本地位置访问音频文件,并允许用户在单击Listen链接时收听/下载该文件。
什么似乎是最好的方式去做这件事?

de90aj5v

de90aj5v1#

以下是最终结果:

[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>

感谢我老板的帮助。

2ledvvac

2ledvvac2#

也许使用FileResult?

[HttpPost]
 public FileResult GetAudioFile(string fileLocation)
 {
    using(FileStream fs = new FileStream(fileLocation)){

       return File(fs.ToArray(), "audio/mpeg");
    }

 }
6tqwzwtp

6tqwzwtp3#

其他答案不启用“部分内容”,因此用户无法查找。
在继续之前,您还应该确保攻击者无法通过提供../../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;
    }

相关问题