使用 dataForm 为 null 的对象将 DataForm 发送到服务器
Send DataForm to server with an object the dataForm is null
我尝试使用对象将 dataForm 发送到服务器。
该对象包含其他内容:
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);
}
但是在服务器中我得到了除文件之外的所有信息,我得到的是空值。
我没有准确地尝试过您在做什么,但是在尝试通过 MVC 表单执行文件上传时我确实遇到了类似的结果。
该文件始终为空。
事实证明,问题在于表单必须声明它是 Multi-Part 上传
例如:
<form id="Form1" method="post" encType="multipart/form-data" runat="server">
我需要 encType。
我认为在您的 angular class 中,您应该添加 encType header.
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)
)
}
}
唉,我不是 angular 开发人员,但我有理由相信是 multi-part header 你缺少的导致了这个问题。
我尝试使用对象将 dataForm 发送到服务器。 该对象包含其他内容:
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);
}
但是在服务器中我得到了除文件之外的所有信息,我得到的是空值。
我没有准确地尝试过您在做什么,但是在尝试通过 MVC 表单执行文件上传时我确实遇到了类似的结果。 该文件始终为空。
事实证明,问题在于表单必须声明它是 Multi-Part 上传
例如:
<form id="Form1" method="post" encType="multipart/form-data" runat="server">
我需要 encType。
我认为在您的 angular class 中,您应该添加 encType header.
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)
)
}
}
唉,我不是 angular 开发人员,但我有理由相信是 multi-part header 你缺少的导致了这个问题。