-
-
Save eouw0o83hf/6518be273c9906e56989287b237e244c to your computer and use it in GitHub Desktop.
// Based on https://gist.github.com/AshikNesin/e44b1950f6a24cfcd85330ffc1713513 | |
import React from 'react' | |
import { post } from 'axios'; | |
class UploadForm extends React.Component { | |
constructor(props) { | |
super(props); | |
this.state = { | |
id: 'get-id-from-somewhere', | |
file: null, | |
}; | |
} | |
async submit(e) { | |
e.preventDefault(); | |
const url = `http://target-url/api/${this.state.id}`; | |
const formData = new FormData(); | |
formData.append('body', this.state.file); | |
const config = { | |
headers: { | |
'content-type': 'multipart/form-data', | |
}, | |
}; | |
return post(url, formData, config); | |
} | |
setFile(e) { | |
this.setState({ file: e.target.files[0] }); | |
} | |
render() { | |
return ( | |
<form onSubmit={e => this.submit(e)}> | |
<h1>File Upload</h1> | |
<input type="file" onChange={e => this.setFile(e)} /> | |
<button type="submit">Upload</button> | |
</form> | |
); | |
} | |
} |
using System; | |
using System.IO; | |
using System.Threading.Tasks; | |
using Microsoft.AspNetCore.Http; | |
using Microsoft.AspNetCore.Mvc; | |
namespace Demo.Web.Controllers | |
{ | |
public class UploadController : Controller | |
{ | |
[HttpPost] | |
[Route("{id:Guid}")] | |
public async Task<IActionResult> Post([FromRoute]Guid id, [FromForm]IFormFile body) | |
{ | |
byte[] fileBytes; | |
using(var memoryStream = new MemoryStream()) | |
{ | |
await body.CopyToAsync(memoryStream); | |
fileBytes = memoryStream.ToArray(); | |
} | |
var filename = body.FileName; | |
var contentType = body.ContentType; | |
SaveFileToDatabase(id, fileBytes, filename, contentType); | |
return Ok(); | |
} | |
} | |
} |
Could you please upload the function SaveFileToDatabase() ?
This refers to whatever core logic your application uses to actually persist those values to whatever database you are using.
and what if we are dealing with a list of uploaded files ? could you give us an example, please ?
and what if we are dealing with a list of uploaded files ?
You can treat it as any other POST
model: add an ICollection<IFormFile>
property to the model that your controller is expecting, then just change 'body'
in formData.append('body', this.state.file);
to the name of that collection property.
Get errors:
{"errors":{"image":["Could not create an instance of type Microsoft.AspNetCore.Http.IFormFile. Type is an interface or abstract class and cannot be instantiated. Path 'image', line 1, position 55."]},"title":"One or more validation errors occurred.","status":400,"traceId":"80000095-0003-fe00-b63f-84710c7967bb"}
Help. Please.
Could you please upload the function SaveFileToDatabase() ?