我尝试使用对象将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。
答案 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)
)
}
}
唉,我不是一个有角度的开发人员,但我有理由相信这是你所遗漏的导致这个问题的多部分标题。