在将XML文件从C#模型下载/导出到浏览器的本地计算机时遇到问题(我有前端)。 但是我可以将文件从C#模型下载/导出到XML,并将其保存在服务器上的目录中。
我正在使用以下代码:
var gradeExportDto = Mapper.Map<GradeExportDto>(responseGradeDto);
System.Xml.Serialization.XmlSerializer writer = new System.Xml.Serialization.XmlSerializer(gradeExportDto.GetType());
var path = _configuration.GetValue<string>(AppConstants.IMPORT_EXPORT_LOCAL_URL) + "\\"+ responseGradeDto.Code+"_"+DateTime.UtcNow.ToString("yyyy-MM-dd") + ".xml";
System.IO.FileStream file = System.IO.File.Create(path);
writer.Serialize(file, gradeExportDto);
file.Close();
角度代码:
onExport(selectedData: any): void{
this.apiService.post(environment.api_url_master, 'ImportExport/ExportGrade/', selectedData).subscribe(result => {
this.translateService.get('GradeExportSuccess').subscribe(value => this.toastr.success(value));
}, err => {
this.toastr.error(err.message);
});
}
我需要帮助将此文件下载到运行浏览器的本地系统。 如果我需要更多信息,请告诉我。 注意:我不是要下载现有文件。我有C#模型,需要将其转换为XML,然后将其下载到本地。但是我可以将其转换为XML,但不能在本地下载。
答案 0 :(得分:0)
您不能将任何内容直接保存到客户端计算机。您所能做的就是提供文件作为对请求的响应,然后通常会在客户端上提示下载对话框,使他们可以选择将其保存在本地计算机上的某个位置。
@croxy使您链接到的是如何返回这样的响应。如果问题是答案使用的是现有文件,则可以忽略该部分。这样的想法是,无论实际来自何处,您都将返回byte[]
或stream
。如果要在内存中创建XML,则只需执行以下操作即可:
return File(memoryStream.ToArray(), "application/xml", "file.xml");
答案 1 :(得分:0)
与其将数据序列化为文件,不如将其序列化为流。 MemoryStream
,然后从您的操作中返回File()
:
public IActionResult GetXml()
{
var gradeExportDto = Mapper.Map<GradeExportDto>(responseGradeDto);
var writer = new System.Xml.Serialization.XmlSerializer(gradeExportDto.GetType());
var stream = new MemoryStream();
writer.Serialize(stream, gradeExportDto);
var fileName = responseGradeDto.Code + "_" + DateTime.UtcNow.ToString("yyyy-MM-dd") + ".xml";
return File(stream.ToArray(), "application/xml", fileName);
}
答案 2 :(得分:0)
我在下面的链接中找到了将XML下载到本地系统的另一种方法: https://www.aravin.net/converting-json-toxml-xml-to-json-in-node-js-using-xml2js-package-in-typescript/