繁体   English   中英

如何将文件连同数据从 Angular 上传到 .NET 核心

[英]How to upload file along with data from Angular to .NET core

我正在运行 Angular 9 应用程序,我想实现文件上传行为。 在表单中,用户必须输入标题、描述并仅上传一个 .zip 格式的文件,在单击“提交”时,我想通过 http post call 将表单值与文件一起发送到后端(使用 do.net)。

文件上传.component.ts

        uploadFile(files) {
            const formData = new FormData();
            const fileToUpload = files[0] as File;
            formData.append('file', fileToUpload, fileToUpload.name);
            const data = {
               title: this.form.value.Title,
               description: this.form.value.Description,
               File: formData
            };
            console.log(data);
            this.http.post('https://localhost:5001/api/idea/add', data).subscribe((response) => {
                console.log(response);
            }});
        }

文件上传.component.html

<input type="file" #file placeholder="Choose file" (change)="uploadFile(file.files)" multiple>

文件控制器.cs

[HttpPost("api/idea/add")]
public async Task<IActionResult> AddIdea([FromBody] IdeaDto ideaDto) { }

后端期望数据采用以下格式

IdeaDto.cs

public class IdeaDto
{
    public IFormFile File { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
}

提交数据时出现以下错误

在此处输入图像描述

此外,我执行了 console.log(data) 并获得了文件值,如下图所示。 我不确定这是否是正确的数据

在此处输入图像描述

这里有什么问题? 我真的没主意了,也许在花了这么多时间之后我需要对此有新的想法

取自 api 中的表格

[HttpPost("api/idea/add")]
public async Task<IActionResult> AddIdea([FromForm] IdeaDto ideaDto) { }

并在 angular 中填写表单数据而不是创建 object

uploadFile(files) {
            const formData = new FormData();
            const fileToUpload = files[0] as File;
            formData.append('file', fileToUpload, fileToUpload.name);
            formData.append('title',this.form.value.Title);
            formData.append('description',this.form.value.Description);
            console.log(data);
            this.http.post('https://localhost:5001/api/idea/add', formData ).subscribe((response) => {
                console.log(response);
            }});
        }

当您发布文件等二进制数据时,它们必须作为多部分表单数据发布,请使用以下 header

Content-Type: multipart/form-data;

在 model 中,您应该将数据作为文件而不是自定义接口 ( IFormFile ) 接收

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM