【问题标题】:How to get downloadable files to view from controller如何从控制器获取可下载的文件以查看
【发布时间】:2017-10-30 23:29:17
【问题描述】:

我在 asp.net mvc-5 中使用实体框架,并且我提供了将存储在 SQL Server 中的文件作为 FILESTREAM 上传的功能(文件不存储在文件夹中,而是它们的内容作为数据库表中的字节数组)。现在我想从数据库中获取这些文件并让它们出现在视图中(会有一个链接作为文件名,您可以单击该链接并开始下载过程)。此外,表中的列分别包含文件名、文件扩展名及其内容。 我将为您提供我的模型和控制器以供上传,以便您了解我是如何做到的:

public class File
{
    [Key]
    public int fileId{ get; set; }

    [Required]
    public byte[] fileContent{ get; set; }

    public string fileUrl { get; set; }

    public string fileExtension{ get; set; }

    public string fileName{ get; set; }
}

[HttpPost]
public ActionResult UploadFile([Bind(Include = "Title, File")] FileViewModel 
fileModel)
{
    if (ModelState.IsValid)
    {
        var fileData = new MemoryStream();
        fileModel.File.InputStream.CopyTo(fileData);

        string name = Path.GetFileName(fileModel.File.FileName);
        string extension= Path.GetExtension(fileModel.File.FileName);

        var file = new FileModel { fileName = name, 
        fileExtension= extension, fileContent= fileData.ToArray() };
        _context.File.Add(file);

        _context.SaveChanges();

        return RedirectToAction("UploadFile");
    }
    return View(fileModel);
}

我试图寻找答案,但每个回复都做了一些我不需要的事情。我查看了 FileStreamResult,但从这个角度来看,我无法满足我的需求。

【问题讨论】:

    标签: asp.net-mvc entity-framework asp.net-mvc-5 downloadfile sqlfilestream


    【解决方案1】:

    试试这个下载文件。

    var fileanme ="your filename with path";
    var fileBytes = System.IO.File.ReadAllBytes(fileanme);
    Response.AppendHeader("Content-Disposition", "inline; filename='abc.pdf'");
    return File(fileBytes, "application/pdf"); 
    

    【讨论】:

    • 我看到了类似的东西,但问题在于 File 方法的第二个参数中的那个魔术字符串。由于我有多种类型要发布和下载,所以有点棘手。我会记住这段代码。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    • 2019-03-18
    • 1970-01-01
    • 2010-10-18
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多