You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于MVC+Razor+JavaScript实现数据库文件下载及列表展示咨询

我帮你把这段实现可下载文件列表的代码整理成清晰的Markdown格式,结合MVC、Razor和JavaScript的完整实现逻辑如下:

实现可下载文件列表与下载功能(MVC+Razor+JavaScript)

1. Razor视图:渲染文件列表表格

这段Razor代码会遍历Model中的文件集合,生成可点击的文件列表表格,点击行就会触发下载动作:

<table style="border: none; width:100%">
    @for (int i = 0; i <= Model.docs.Count() - 1; i++)
    {
        <tr onclick="downloadFile('@Model.docs[i].id.ToString()')" class="rowFile" data-row=@i id=@("rigaDoc" + i)>
            <td style="border-bottom:1px solid black; width:30px;">
                <img src="@Url.Content(Model.docs[i].icon)" alt="@Model.docs[i].fileName" />
            </td>
            <td style="border-bottom:1px solid black; padding-left: 20px;">
                @Model.docs[i].fileName
            </td>
            <td style="border-bottom:1px solid black; text-align:right; padding-right:10px;">
                @Model.docs[i].fileSize
            </td>
        </tr>
    }
</table>

注:Model需要包含一个docs集合,每个元素需有id(文件唯一标识)、icon(图标路径)、fileName(文件名)、fileSize(文件大小)字段

2. JavaScript:触发下载的前端函数

通过动态创建<a>标签的方式触发浏览器下载,避免页面跳转:

function downloadFile(fileId) {
    // 构建指向MVC控制器下载动作的URL
    const downloadUrl = `/File/Download/${fileId}`;
    
    // 创建临时a标签触发下载
    const downloadLink = document.createElement('a');
    downloadLink.href = downloadUrl;
    downloadLink.download = ''; // 让浏览器自动使用后端返回的文件名
    document.body.appendChild(downloadLink);
    downloadLink.click();
    document.body.removeChild(downloadLink);
}

3. MVC控制器:处理下载请求的后端逻辑

后端控制器接收文件ID,读取文件并返回下载响应:

public class FileController : Controller
{
    // 假设注入了文件业务服务,用于获取文件信息
    private readonly IFileRepository _fileRepo;

    public FileController(IFileRepository fileRepo)
    {
        _fileRepo = fileRepo;
    }

    public IActionResult Download(string fileId)
    {
        // 根据ID获取文件元数据(路径、文件名、MIME类型等)
        var fileMetadata = _fileRepo.GetFileMetadataById(fileId);
        if (fileMetadata == null)
        {
            return NotFound("请求的文件不存在");
        }

        // 读取文件字节流(大文件建议用流式读取,避免内存溢出)
        var fileContent = System.IO.File.ReadAllBytes(fileMetadata.FilePath);
        
        // 返回文件下载结果,指定MIME类型和文件名
        return File(fileContent, fileMetadata.MimeType, fileMetadata.FileName);
    }
}

注:IFileRepository是自定义的文件数据访问服务,需自行实现文件元数据的查询逻辑;大文件场景建议使用PhysicalFile或流式返回,优化内存占用

内容的提问来源于stack exchange,提问作者theoden9017

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:49:40