使用对象将数据形式发送到服务器,数据形式为null



我尝试使用对象将数据形式发送到服务器。该对象包含其他内容:

public class versionModel
{
    public string productName { get; set; }
    public string versionNumber { get; set; }
    public string[] features { get; set; }
    public HttpPostedFileBase file { get; set; }
}

我从Angular 2服务发送它, 这是创建上传并保存它的组件:

upload() 
{
    let inputEl: HTMLInputElement = this.inputEl.nativeElement;
    let fileCount: number = inputEl.files.length;
    let formData = new FormData();
    if (fileCount > 0) { 
        for (let i = 0; i < fileCount; i++) {
            formData.append('file[]', inputEl.files.item(i));
        }
        this.service.upload(formData).subscribe(x => this.me = x);
        this.formData2.emit(formData.getAll('file[]'));
    }
}

这是客户端的模型:

export class AddVersion 
{
    constructor(public productName: string, public versionNumber: string, public features: string[], public file: FormData) {
        this.productName = productName;
        this.versionNumber = versionNumber;
        this.features = features;
       this.file = file;
    }
}

这是服务器端:

[HttpPost]
public ActionResult AddVersion(versionModel version)
{
    ServiceReference1.ProductsServiceClient psc = new ServiceReference1.ProductsServiceClient();
   var res= psc.AddVersion(new ServiceReference1.AddVersionModel()
    {
        productName = version.productName,
        versionNumber = version.versionNumber,
        features = version.features,
        file =version.file.InputStream
   });
    return Json(res, JsonRequestBehavior.AllowGet);
}

但是在服务器中,我得到了除文件以外的所有信息,我得到了null。

我没有尝试确切地做什么,但是当尝试通过MVC表单执行文件上传时,我确实遇到了类似的结果。该文件始终为空。

事实证明,问题是表格必须声明说这是一个多部分上传

eg:

<form id="Form1" method="post" encType="multipart/form-data" runat="server">

我需要enctype。

我认为在您的角班中,您应该添加enctype标头。

headers.append('Content-Type', 'multipart/form-data');

我找到了以下解决方案:在此页面文件上传到Angular?

<input type="file" (change)="fileChange($event)" placeholder="Upload file" accept=".pdf,.doc,.docx">
fileChange(event) {
    let fileList: FileList = event.target.files;
    if(fileList.length > 0) {
        let file: File = fileList[0];
        let formData:FormData = new FormData();
        formData.append('uploadFile', file, file.name);
        let headers = new Headers();
        /** No need to include Content-Type in Angular 4 */
        headers.append('Content-Type', 'multipart/form-data');
        headers.append('Accept', 'application/json');
        let options = new RequestOptions({ headers: headers });
        this.http.post(`${this.apiEndPoint}`, formData, options)
            .map(res => res.json())
            .catch(error => Observable.throw(error))
            .subscribe(
                data => console.log('success'),
                error => console.log(error)
            )
    }
}

a,我不是角开发人员,但是我可以合理地确定是您缺少的多部分标题引起了问题。

相关内容

  • 没有找到相关文章

最新更新