如何在SQL Server中检索以二进制形式存储的已保存PDF文件?

时间:2019-03-29 11:45:19

标签: c# sql-server visual-studio pdf asp.net-core

我已经检查了关于StackOverflow的许多问题,并且还在许多不同的网站上搜索了可能的解决方案,但是我似乎找不到任何答案。有些不起作用,另一些则很老,也不起作用。

我已将.pdf文件在SQL Server中保存为二进制文件。似乎可以工作。但是我不知道如何检索数据并将byte[]转换回.pdf文件并使其可供下载。

这是我的模型,我将.pdf文件保存在byte[]中:

public class Language
{
    public int Id { get; set; }
    public string Name { get; set; }
    public byte[] Certificate { get; set; }
}

这是我上传到数据库的方式:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(string name, IFormFile certificate)
{
    Language language = new Language()
    {
        Name = name
    };

    if(certificate.Length > 0)
    {
        using (var stream = new MemoryStream())
        {
            await certificate.CopyToAsync(stream);
            language.Certificate = stream.ToArray();
        }
    }

    _context.Add(language);
    await _context.SaveChangesAsync();

    return RedirectToAction(nameof(Index));
}

我希望它能够检索数据然后下载。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您需要执行一项操作以返回字节:

public async Task<IActionResult> GetCertificate(int id)
{
    var language = await _context.Languages.FindAsync(id);
    if (language == null)
        return NotFound();

    return File(language.Certificate, "application/pdf");
}

然后,您只需链接到此操作即可。