The following code example illustrates how to handle video upload on your server using .Net Core as a server-side language. For step by step explanation of the upload flow see Video upload concept.
The main index page.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <!-- Include Editor style. --> <link href="https://cdn.jsdelivr.net/npm/froala-editor@3.0.0-beta.1/css/froala_editor.pkgd.min.css" rel="stylesheet" type="text/css" /> </head> <body> <!-- Include Editor JS files. --> <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/froala-editor@3.0.0-beta.1//js/froala_editor.pkgd.min.js"></script> <div class="sample"> <h2>Video upload example.</h2> <form> <textarea id="edit" name="content"></textarea> </form> </div> <!-- Initialize the editor. --> <script> new FroalaEditor('#edit', { // Set the video upload URL. videoUploadURL: '/UploadFiles', videoUploadParams: { id: 'my_editor' } }) </script> </body> </html>
HomeController.cs
file is the default controller that will be used in this example to define the upload part. The uploads directory will be automatically created if it does not exist under wwwroot/upload/
. The root directory must be write available otherwise the upload directory will not be created.
The HomeController will manage the request and the upload part, so you should define the following functions in this file. After processing the uploaded video, if it passes the validation, the server will respond with a JSON object containing a link to the uploaded video.
E.g.: {"link":"http://server_address/upload/name_of_file"}
.
public class HomeController : Controller { private readonly IHostingEnvironment _hostingEnvironment; public HomeController(IHostingEnvironment hostingEnvironment) { _hostingEnvironment = hostingEnvironment; } HttpPost("UploadFiles")] [Produces("application/json")] public async Task<IActionResult> Post(List<IFormFile> files) { // Get the file from the POST request var theFile = HttpContext.Request.Form.Files.GetFile("file"); // Get the server path, wwwroot string webRootPath = _hostingEnvironment.WebRootPath; // Building the path to the uploads directory var fileRoute = Path.Combine(webRootPath, "uploads"); // Get the mime type var mimeType = HttpContext.Request.Form.Files.GetFile("file").ContentType; // Get File Extension string extension = System.IO.Path.GetExtension(theFile.FileName); // Generate Random name. string name = Guid.NewGuid().ToString().Substring(0, 8) + extension; // Build the full path inclunding the file name string link = Path.Combine(fileRoute, name); // Create directory if it does not exist. FileInfo dir = new FileInfo(fileRoute); dir.Directory.Create(); // Basic validation on mime types and file extension string[] videoMimetypes = { "video/mp4", "video/webm", "video/ogg" }; string[] videoExt = { ".mp4", ".webm", ".ogg" }; try { if (Array.IndexOf(videoMimetypes, mimeType) >= 0 && (Array.IndexOf(videoExt, extension) >= 0)) { // Copy contents to memory stream. Stream stream; stream = new MemoryStream(); theFile.CopyTo(stream); stream.Position = 0; String serverPath = link; // Save the file using (FileStream writerFileStream = System.IO.File.Create(serverPath)) { await stream.CopyToAsync(writerFileStream); writerFileStream.Dispose(); } // Return the file path as json Hashtable videoExt = new Hashtable(); videoExt.Add("link", "/uploads/" + name); return Json(videoExt); } throw new ArgumentException("The video did not pass the validation"); } catch (ArgumentException ex) { return Json(ex.Message); } } }