Загрузите файл XML с помощью API ядра .net на локальный компьютер. - PullRequest
0 голосов
/ 11 марта 2019

Возникла проблема при загрузке / экспорте файла 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 голосов
/ 11 марта 2019

Вместо сериализации ваших данных в файл, сериализуйте их в поток, например.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);
}
0 голосов
/ 12 марта 2019

Я нашел альтернативный способ загрузки XML в локальную систему по ссылке ниже: https://www.aravin.net/converting-json-toxml-xml-to-json-in-node-js-using-xml2js-package-in-typescript/

0 голосов
/ 11 марта 2019

Вы не можете сохранить что-либо непосредственно на клиентском компьютере.Все, что вы можете сделать, это предоставить файл в качестве ответа на запрос, который затем обычно запрашивает диалог загрузки на клиенте, позволяя им выбрать сохранение его где-нибудь на своем локальном компьютере.

Что связано @croxyВы, как вернуть такой ответ.Если проблема заключается в том, что в ответе используется существующий файл, вы можете игнорировать эту часть.Идея в том, что вы возвращаете byte[] или stream, независимо от того, откуда это на самом деле.Если вы создаете XML в памяти, вы можете просто сделать что-то вроде:

return File(memoryStream.ToArray(), "application/xml", "file.xml");
...