Ye *_*int 5 file-upload reactjs asp.net-core-2.0
我是react.js和ASP.Net核心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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
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");
}
}
Run Code Online (Sandbox Code Playgroud)
请告知我该如何解决这个问题.
我完成了以下工作:
在.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; }
}
}
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个控制器类并编写了如下函数.
[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();
}
Run Code Online (Sandbox Code Playgroud)
并编写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");
}
}
Run Code Online (Sandbox Code Playgroud)
它完美无缺.谢谢!
| 归档时间: |
|
| 查看次数: |
10784 次 |
| 最近记录: |