使用.net核心API将XML文件下载到本地计算机

时间:2019-03-11 12:49:08

标签: c# filesystems asp.net-core-webapi .net-core-2.2

在将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,但不能在本地下载。

3 个答案:

答案 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/