public async Task HandleWsUpload() { try { Log.Information("New upload."); // Setup ws connection if (!HttpContext.WebSockets.IsWebSocketRequest) { BadRequest(); return; } WebSocket ws = await HttpContext.WebSockets.AcceptWebSocketAsync(); SetupMsg setupMsg = await Setup(ws); FileProcessor processor = new FileProcessor(ws, setupMsg.FileSize, setupMsg.Code, setupMsg.FileName); await processor.Run(); } catch (Exception e) { Log.Error("Upload failed: {exception}", e); } }
private async Task <SetupMsg> Setup(WebSocket ws) { var buf = new byte[256]; // Read setup msg WebSocketReceiveResult result = await ws.ReceiveAsync(new ArraySegment <byte>(buf), CancellationToken.None); SetupMsg setupMsg = JsonConvert.DeserializeObject <SetupMsg>(Encoding.UTF8.GetString(buf, 0, result.Count)); if (setupMsg.FileSize > UploadConfig.MaxFileSize) { await ws.CloseAsync(WebSocketCloseStatus.PolicyViolation, "File size too large", CancellationToken.None); throw new Exception("File size too large"); } setupMsg.FileName = UploadUtil.SanitizeFileName(setupMsg.FileName); setupMsg.Code = GetGuid(); _dbHelper.InsertFilesEntry(Files.CreateWithUtcNow(setupMsg.Code, setupMsg.FileName, setupMsg.FileSize)); await UploadUtil.SendResp(ws, Resp.Ok()); return(setupMsg); }