LANCommander/Controllers/UploadController.cs
2023-01-02 15:44:04 -06:00

54 lines
1.5 KiB
C#

using LANCommander.Models;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace LANCommander.Controllers
{
public class UploadController : Controller
{
private const string UploadDirectory = "Upload";
public JsonResult Init()
{
var key = Guid.NewGuid().ToString();
if (!Directory.Exists(UploadDirectory))
Directory.CreateDirectory(UploadDirectory);
if (!System.IO.File.Exists(Path.Combine(UploadDirectory, key)))
System.IO.File.Create(Path.Combine(UploadDirectory, key)).Close();
return Json(new
{
Key = key
});
}
public async Task<IActionResult> Chunk([FromForm] ChunkUpload chunk)
{
var filePath = Path.Combine(UploadDirectory, chunk.Key.ToString());
if (!System.IO.File.Exists(filePath))
return BadRequest("Destination file not initialized.");
Request.EnableBuffering();
using (var ms = new MemoryStream())
{
await chunk.File.CopyToAsync(ms);
var data = ms.ToArray();
using (var fs = new FileStream(filePath, FileMode.Append, FileAccess.Write, FileShare.None))
{
fs.Position = chunk.Start;
fs.Write(data, 0, data.Length);
}
}
Thread.Sleep(100);
return Json("Done!");
}
}
}