我的Angular项目无法通过ASP.NET core API下载(另存为)pdf文件。pdf文件存储在SQL Server中。
我尝试了stackoverflow中发布的许多方法,但没有一种对我有效。有些示例下载了一个pdf文件,但如果试图打开它,它会发现一个错误“..不支持..损坏”。
API(我倾向于返回一行,而不是仅返回一个vaule字节[])
[HttpGet]
[Route("detail/{studentid:int}/{reportSeq:int}")]
public async Task<ActionResult<byte[]>> GetStudentAcademicReport2(int StudentID, int ReportSeq)
{
var report = await _context.AcademicReportDetails.FromSql("select * from [dbo].[ufnStudentAcademicReport] (8213, 8158)").FirstOrDefaultAsync();
if (report == null)
{
return NotFound();
}
return report.ReportContent;
}
this.httpclient.get(“https://localhost:44369/api/values/detail/8213/8158”,{responseType:'blob'})
.subscribe(response=>{console.log(响应);
const url = window.URL.createObjectURL(new Blob([response]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', 'file.pdf');
document.body.appendChild(link);
link.click();
this.httpclient.get(“http://localhost:5000/api/studentAcademicReports/detail/8213/8158”,{responseType:'arraybuffer'})
.subscribe(response=>{console.log(响应);
const file = new Blob([response], {type: 'application/pdf'});
const fileURL = window.URL.createObjectURL(file);
let objectURL = 'data:image/jpeg;base64,' + response;
let fileURL2 = this.sanitizer.bypassSecurityTrustUrl(objectURL);
const link = document.createElement('a');
link.href = fileURL;
link.download = 'sample.pdf';
link.click();
在Windows窗体项目中工作
cmd.commandtext=“Select*from[dbo].[ufnStudentAcademicReport](8213,8158)”;Cmd.CommandType=CommandType.Text;
if (cmd.Connection.State != ConnectionState.Open)
{
cmd.Connection.Open();
}
DbDataReader read = cmd.ExecuteReader();
if (read.HasRows)
{
while (read.Read())
{
byte[] b = null;
b = (byte[])read.GetValue(read.GetOrdinal("ReportContent"));
System.IO.File.WriteAllBytes(@"c:\temp\test.pdf", b);
}
}
无法通过API在Windows窗体项目中工作
var content = await NewResponse.Content.ReadAsByteArrayAsync();
System.IO.File.WriteAllBytes(@"c:\temp\test111.pdf", content);
当您从ASP.NET Core
操作返回byte[]
时,它的结果是base64
编码的,这就是您得到一个“损坏”文件的原因。您必须从action返回fileResult
,以便让框架正确处理二进制数据
public async Task<FileResult> GetStudentAcademicReport2(int StudentID, int ReportSeq)
{
var report = await _context.AcademicReportDetails.FromSql("select * from [dbo].[ufnStudentAcademicReport] (8213, 8158)").FirstOrDefaultAsync();
if (report == null)
{
return NotFound();
}
return File(report.ReportContent, "application/pdf", "test.pdf");
}
文件当前将转到:
Error:SyntaxError:在JSON中,在XMLHttpRequest.onload Oketask(http://localhost:4200/polyfills.js:2780:60)在zone.push../node_modules/zone.js/dist/zone.js.zone.runtask(http://localhost:4200/polyfills.js:2553:4
问题内容: 我需要下载存储在数据库中的文件。我认为我正确地执行了查询并称之为查询,但我不知道如何将其连接到JSF页面中的按钮。我也想知道,在将图像传递到JSF页面之前,是否必须将该图像保存在服务器的文件夹中。如果是这样,我该怎么做? 这是我用来从db返回byte []的查询: 这是一个简单的EJB,它调用该查询然后获取ID: 现在,这是令我困惑的部分,我如何才能将其与JSF页面和托管bean结合起
我正在尝试下载一个运行时生成的PDF文件(使用iTextPDF生成的PDF文件)在Springboot服务,并希望通过angular 6.0在新选项卡中打开该文件。我试着遵循这个,如何下载一个在我的服务器(springboot)上生成的angular的pdf文件?但错误为“无法加载PDF文档”。代码出了什么问题? Springboot服务:
问题内容: 我尝试使用以下代码下载pdf文件。它存储在应用程序数据中。但是我需要在iPhone的 “文件” 文件夹中显示下载的pdf 。 可能吗?? 问题答案: 这是下载任何文件并保存到“照片”(如果是图像文件)或“文件”(如果是pdf)的方法
API将返回CSV/PDF/XLS类型的文件 问题: