C# 如何在SQL Server中检索保存为二进制文件的PDF文件?
我检查了许多关于StackOverflow的问题,也在许多不同的网站上搜索了可能的解决方案,但我似乎没有找到任何答案。有些人不工作,有些人年纪很大,也不工作 我已将C# 如何在SQL Server中检索保存为二进制文件的PDF文件?,c#,sql-server,visual-studio,pdf,asp.net-core,C#,Sql Server,Visual Studio,Pdf,Asp.net Core,我检查了许多关于StackOverflow的问题,也在许多不同的网站上搜索了可能的解决方案,但我似乎没有找到任何答案。有些人不工作,有些人年纪很大,也不工作 我已将.pdf文件以二进制形式保存在SQL Server中。似乎有效。但我不知道如何检索数据,并将字节[]返回到.pdf文件以供下载 这是我的模型,我将.pdf文件保存在字节[]中: public class Language { public int Id { get; set; } public string Name
.pdf
文件以二进制形式保存在SQL Server中。似乎有效。但我不知道如何检索数据,并将字节[]
返回到.pdf
文件以供下载
这是我的模型,我将.pdf
文件保存在字节[]
中:
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));
}
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务创建(字符串名称、文件证书)
{
语言=新语言()
{
Name=Name
};
如果(证书长度>0)
{
使用(var stream=new MemoryStream())
{
等待证书。CopyToAsync(流);
language.Certificate=stream.ToArray();
}
}
_添加(语言);
wait_context.SaveChangesAsync();
返回重定向到操作(名称(索引));
}
我希望它能够检索数据,然后下载它
非常感谢您的帮助。您需要一个操作来返回字节:
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");
}
公共异步任务GetCertificate(int-id)
{
var language=wait_context.Languages.FindAsync(id);
if(语言==null)
返回NotFound();
返回文件(language.Certificate,“application/pdf”);
}
然后,您只需链接到此操作。您需要一个操作来返回字节:
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");
}
公共异步任务GetCertificate(int-id)
{
var language=wait_context.Languages.FindAsync(id);
if(语言==null)
返回NotFound();
返回文件(language.Certificate,“application/pdf”);
}
然后,您可以简单地链接到此操作。当您将pdf文件转换为字节时,您使用的是什么类。我使用的是iFormFile您是指FromFile吗?FromFile包装一个字符串,该字符串将损坏二进制pdf。最好使用byte[]pdf=File.ReadAllBytes(“文件名”);writealBytes(“文件名”,pdf);我将在另一个项目中尝试。谢谢转换为字节时,您对pdf文件使用的是什么类。我使用的是iFormFile您是指FromFile吗?FromFile包装一个字符串,该字符串将损坏二进制pdf。最好使用byte[]pdf=File.ReadAllBytes(“文件名”);writealBytes(“文件名”,pdf);我将在另一个项目中尝试。谢谢