Как правильно принимать файлы в Angular c ASP.NET Core Web API?

306
14 февраля 2018, 08:52

У меня есть файл на сервере, который я хочу отправить клиенту. Я отправлю его так

        [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

READ ALSO
сериализация xml

сериализация xml

При сериализации xml выкидывает ошибку !

217
Xamarin. Как из ViewModel передавать данные в Model?

Xamarin. Как из ViewModel передавать данные в Model?

Доброе время сутокНе могу победить одну задачку:

211
Изменение статического свойства

Изменение статического свойства

На вопрос подтолкнули ответы из вопросаИзменения элементов статического списка и вправду подхватываются, но что насчет изменения не элемента,...

175
Unity WebGL жор памяти

Unity WebGL жор памяти

При первом запуске игры в WebGL она кушает 500 мб памяти, и в общем, меня это устраиваетНо стоит нажать F5 и загрузить игру снова, как диспетчер...

135