我已经检查了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));
}
我希望它能够检索数据,然后下载它。
我感谢任何帮助。
您需要一个操作来返回字节:
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");
}
然后,您可以简单地链接到此操作。