У меня есть файл на сервере, который я хочу отправить клиенту. Я отправлю его так
[HttpPost] public async Task<IActionResult> EditRu([FromBody]IOptionsDiplom options, string key) { try { if (!FilesController.Files.Keys.Contains(key)) throw new Exception("Файл не существует на сервере"); options.Bytes = System.IO.File.ReadAllBytes(Path.Combine(UploadFolder, key + ".docx")); byte[] bytes; using (TaskModel task = new TaskModel(options, FilesFolder)) { await Task.Run(() => task.EditRu()); bytes = System.IO.File.ReadAllBytes(task.PathFile); } FilesController.DeleteFile(key); return File(bytes, "application/vnd.openxmlformats-officedocument.wordprocessingml.document", key); } catch (Exception e) { return StatusCode(StatusCodes.Status500InternalServerError, e); } }
Я также пробовал и так
[HttpPost] public async Task<IActionResult> EditRu([FromBody]IOptionsDiplom options, string key) { try { if (!FilesController.Files.Keys.Contains(key)) throw new Exception("Файл не существует на сервере"); string pathUploadFile= Path.Combine(UploadFolder, key + ".docx"); options.Bytes = System.IO.File.ReadAllBytes(pathUploadFile); using (TaskModel task = new TaskModel(options, FilesFolder)) { await Task.Run(() => task.EditRu()); await Task.Run(() => System.IO.File.Copy(task.PathFile, pathUploadFile, true)); } return PhysicalFile(pathUploadFile, "application/vnd.openxmlformats-officedocument.wordprocessingml.document"); } catch (Exception e) { return StatusCode(StatusCodes.Status500InternalServerError, e); } }
И по другому пробовал. У клиента я принимаю файл так
this.http.post("Diplom/EditRu", this.body, { headers: this.headers(), params: params }).subscribe( result => { var contentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'; var blob = new Blob([result.arrayBuffer()], { type: contentType }); var downloadUrl = URL.createObjectURL(blob); window.open(downloadUrl, "_blank"); }, error => { alert("Не удалось отредактировать файл"); console.error(JSON.stringify(error)); });
Файл, который принимает клиент поврежден и не отправляется. Файл, который на сервере в порядке и прекрасно открывается. Я специально не удалял файл на сервере и открывал его, и останавливал отладку перед отправкой и открывал его, и оба раза на сервере он открывался просто отлично, но клиенту приходит уже поврежденный файл. Не могу понять я не правильно отправляю файл или принимаю его. То есть до этого
return File(bytes, "application/vnd.openxmlformats-officedocument.wordprocessingml.document", key);
Или этого момента
return PhysicalFile(pathUploadFile, "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
Все отлично, но у клиента уже файл не открывается. Работаю с Angular с ASP.NET.Core Web API