使用dataForm为null的对象将DataForm发送到服务器

时间:2018-02-19 08:50:16

标签: c# angular httppostedfilebase dataform

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

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

我从角度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。

1 个答案:

答案 0 :(得分:1)

我还没有尝试过你正在做的事情,但是当我尝试通过MVC表单执行文件上传时,我确实遇到了类似的结果。 该文件始终为空。

事实证明,问题是表格必须声明它是多部分上传

例如:

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

我需要使用encType。

我认为在你的angular类中,你应该添加encType标题。

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

我找到了以下解决方案: 在这个页面 File Upload In 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)
            )
    }
}

唉,我不是一个有角度的开发人员,但我有理由相信这是你所遗漏的导致这个问题的多部分标题。