使用ASP.Net Core 2.0 Web API和React.js上传文件

我是react.js和ASP.Net core 2.0的新手。现在,使用ASP.Net core

2.0作为后端API和react.js作为应用程序接口(前端)编写一个项目。我想知道如何上传文件。我尝试了如下操作,但是在后端,参数值(IFromFile文件)始终为null。似乎该文件未正确发布。这是我的代码:

.Net核心(API)

[HttpPost]

[Route("upload")]

public async Task Upload(IFormFile file)

{

if (file == null) throw new Exception("File is null");

if (file.Length == 0) throw new Exception("File is empty");

using (Stream stream = file.OpenReadStream())

{

using (var binaryReader = new BinaryReader(stream))

{

var fileContent = binaryReader.ReadBytes((int)file.Length);

// await _uploadService.AddFile(fileContent, file.FileName, file.ContentType);

}

}

}

React.js

handleClick(event){

event.preventDefault();

// console.log("handleClick",event);

var self = this;

var apiBaseUrl = axios.defaults.baseURL + "user/upload";

if(this.state.filesToBeSent.length>0){

var filesArray = this.state.filesToBeSent;

const reader = new FileReader();

for(var i in filesArray){

//console.log("files",filesArray[i][0]);

var file = filesArray[i][0];

axios.post(apiBaseUrl, {data: file});

}

alert("File upload completed");

}

else{

alert("Please select files first");

}

}

请告知我该如何解决该问题。

回答:

我已经完成了以下工作:

在.Net Core 2.0 Web API

使用Microsoft.AspNetCore.Http;

我创建了一个模型课

namespace Marter_MRM.Models

{

public class FileUploadViewModel

{

public IFormFile File { get; set; }

public string source { get; set; }

public long Size { get; set; }

public int Width { get; set; }

public int Height { get; set; }

public string Extension { get; set; }

}

}

然后,我创建了一个控制器类,并按如下所示编写了函数。

[HttpPost]

[Route("upload")]

public async Task<IActionResult> Upload(FileUploadViewModel model) {

var file = model.File;

if (file.Length > 0) {

string path = Path.Combine(_env.WebRootPath, "uploadFiles");

using (var fs = new FileStream(Path.Combine(path, file.FileName), FileMode.Create))

{

await file.CopyToAsync(fs);

}

model.source = $"/uploadFiles{file.FileName}";

model.Extension = Path.GetExtension(file.FileName).Substring(1);

}

return BadRequest();

}

并在react中编写api调用函数,如下所示:

handleUploadClick(event){

event.preventDefault();

var self = this;

var apiBaseUrl = axios.defaults.baseURL + "user/upload";

if(this.state.filesToBeSent.length>0){

var filesArray = this.state.filesToBeSent;

let f = new FormData();

for(var i in filesArray){

//console.log("files",filesArray[i][0]);

f = new FormData();

f.append("File",filesArray[i][0] )

axios.post(apiBaseUrl, f, {

headers: {'Content-Type': 'multipart/form-data'}

});

}

alert("File upload completed");

}

else{

alert("Please select files first");

}

}

完美的作品。谢谢!

以上是 使用ASP.Net Core 2.0 Web API和React.js上传文件 的全部内容, 来源链接: utcz.com/qa/402998.html

回到顶部