gpt4 book ai didi

angularjs - 使用 typescript 将文件上传到 Controller

转载 作者:搜寻专家 更新时间:2023-10-30 21:00:22 26 4
gpt4 key购买 nike

我将 ASP.NET MVC 5 用于后端,将 Angular + Typescript 用于 Web 应用程序的前端。

我正在尝试将文件上传到服务器,但由于某种原因, Controller 没有将文件作为参数获取( Controller 中的参数为空)。

我正在分享下面的代码。

提前致谢!

HTML:

<input id="filePath" name="filePath" type="file" accept="image/*" />
<a id="uploadImage" ng-click="ctrl.uploadFile()">Upload</a>

typescript :

// controller class:
uploadFile(): void {
var filePathInput: any = $("#filePath");
if (filePathInput[0].files) {
var file: any = filePathInput[0].files[0];
var resource: any = this.service.uploadFile();
resource.save(file, (result: any) => {
if (!result || !result.success) {
alert("error");
} else {
alert("ok");
}
});
}
}

// service class:
uploadFile(): ng.resource.IResourceClass<IMyResource> {
return this.$resource("/MyController/UploadImage", null, { method: "POST" });
}

后端 Controller :

[HttpPost]
public JsonResult UploadImage([FromBody]HttpPostedFileBase file)
{
if (file == null || file.ContentLength == 0)
{
return NullParameterResponse();
}
else
{
file.SaveAs("/img/" + Path.GetFileName(file.FileName));
return SuccessResponse();
}
}

最佳答案

TransformRequest 函数:这会使您的请求作为 FormData 而不是 JSON 对象发送。

 formDataObject(data: any): any {
var fd = new FormData();
angular.forEach(data, function (value, key) {
fd.append(key, value);
});
return fd;
}

在您的 Angular 资源中,定义保存选项并传递您之前创建的 transformRequest 函数。

uploadChequeFile(): ng.resource.IResourceClass<IChequeLoanResource> {
return this.$resource<IChequeLoanResource>("/Cheque/UploadChequeImage", null,
{
save: {
method: "POST",
transformRequest: this.formDataObject,
headers: { 'Content-Type': undefined, enctype: 'multipart/form-data' }
}
});
}

在您的 Controller 中,只需从传递您的文件的资源中调用您的保存方法。

var chequeFilePathInput: any = $("#chequeFilePath");
if (chequeFilePathInput[0].files) {
var resource: ng.resource.IResourceClass<services.IChequeLoanResource> = this.uLendService.uploadChequeFile();
resource.save({ "files": chequeFilePathInput[0].files[0] }, (result: any) => {
if (!result || !result.success) {
this.errorMessage = "Error al subir la imagen al servidor. Por favor contáctanos si el error persiste.";
} else {
this.chequeLoan.cheque.filePath = result.message;
this.saveChequeLoan();
}
});
} else {
this.errorMessage = "La imagen del cheque es requerida.";
}

最后,您的 Controller 必须接收 IList 参数(与您的 Angular Controller 中定义的名称相同)

public JsonResult UploadChequeImage(IList<IFormFile> files)
{
try
{
if (files != null && files.Count > 0)
{
return CreateResponse(true, CreateFile(files[0], @"img\cheques"));
}

关于angularjs - 使用 typescript 将文件上传到 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38546604/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com