【问题标题】:Angular 6 - Multiple file input in single form groupAngular 6 - 单个表单组中的多个文件输入
【发布时间】:2019-04-16 13:35:29
【问题描述】:

我正在为我的 Web 应用程序设置上传器 它由 2 个文件输入元素组成,其中 第一个文件输入将获取图像并将其存储到图像变量列表中 第二个将获取 pdf 并将其存储到 pdf 文件变量列表中。

我对它所做的方法是将文件对象存储在我命名为 pdfStorage 和 imageStorage 的变量中,以便在填写表单中的必要字段并按下确认按钮后将其传递给 dotnet core api 服务。

将文件对象存储到变量时,我在客户端没有遇到问题。但是,一旦我将这些值发送到服务的参数,这些字段总是显示为 null。

我在 dotnet 核心服务中查看了 Request.Form,我发现它就在那里。我不明白为什么它没有被填充到 ActionResult 的参数中。

这是我放在 dotnet core 服务中的代码:

动作结果:

[HttpPost("SaveNewData"),DisableRequestSizeLimit]
[Consumes("multipart/form-data")]
public ActionResult SaveNewData([FromForm]MyModelUpload modelUpload) {
    var modelUploaded = modelUpload;
    return Ok();
}

参数中的模型:

public class MyModelUpload {
    public IFormFile[] imageFile { get; set; }
    public string description {get;set;}
    public IFormFile[] pdfFileList {get;set;}
    public string uploadedBy { get; set; }
    public string title { get; set; }
    public DateTime? dateEnd {get; set;}
}

这是我用于发送 Angular 表单数据的测试代码:

SaveNewData(formGroupData) {
    let submitData = new FormData();
    let pdfFileArray = formGroupData.pdfStorage;

    // UPLOAD'S DETAIL
    submitData.append('title',formGroupData.title);
    submitData.append('description',formGroupData.title);
    submitData.append('uploadedBy',formGroupData.uploadedBy);
    submitData.append('dateEnd',formGroupData.dateEnd);

    // // FOR IMAGE FILE
    let imageFileObject = <File>formGroupData.imageStorage[0];
    console.log(pdfFileArray);
    submitData.append('imageFile[]',imageFileObject,imageFileObject.name);

    // // LIST OF PDF DOCS
    for(let arrayIndex in pdfFileArray) { 
        submitData
            .append(`pdfFileList[]`,pdfFileArray[arrayIndex]
                ,pdfFileArray[arrayIndex].name);
    }

    return this.http
        .post(`http://localhost:5000/Upload/SaveNewData`,submitData);
}

如何发送我存储在存储变量中的那些文件对象?

【问题讨论】:

  • 您是否尝试将 Multipart/formdata 标头添加到请求中?在 Chrome 调试器菜单(网络选项卡)中验证网络请求可能会有所帮助
  • 您可以使用forloop来追加表单数据
  • @chrisbuttacavoli 我没做过那个。不过,我会尝试一下,然后再给予反馈。谢谢
  • @Prashant Pimpale 之前已经将它附加到 FormData 但我仍然得到相同的结果
  • 你能显示错误吗?

标签: c# angular .net-core


【解决方案1】:

你应该使用这个:

 SaveNewData(formGroupData) {
    let submitData = new FormData();
    let pdfFileArray = formGroupData.pdfStorage;

    // UPLOAD'S DETAIL
    submitData.append('title',formGroupData.title);
    submitData.append('description',formGroupData.title);
    submitData.append('uploadedBy',formGroupData.uploadedBy);
    submitData.append('dateEnd',formGroupData.dateEnd);

    // // FOR IMAGE FILE
    let imageFileObject = <File>formGroupData.imageStorage[0];
    console.log(pdfFileArray);
    submitData.append('imageFile',imageFileObject);

    // // LIST OF PDF DOCS

   for (let i = 0; i < pdfFileArray.length; i++) {
     submitData.append("pdfFileList",pdfFileArray[i]);
    }

    return this.http
        .post(`http://localhost:5000/Upload/SaveNewData`,submitData);
}

【讨论】:

  • 我也试试这个。谢谢
猜你喜欢
  • 2019-06-12
  • 1970-01-01
  • 2018-06-29
  • 1970-01-01
  • 2019-03-19
  • 1970-01-01
  • 1970-01-01
  • 2018-12-29
  • 1970-01-01
相关资源
最近更新 更多