private async Task HandleWebSocket(WebSocketContext context) { var closed = false; var maxMessageSize = 2 * 1024 * 1024; var data = new byte[maxMessageSize]; var socket = context.WebSocket; UploadEntry uploadModel = null; while (!closed) { try { var receive = await socket.ReceiveAsync(new ArraySegment <byte>(data), CancellationToken.None); if (receive.MessageType == WebSocketMessageType.Close) { new Database().SaveUploadEntryInDatabase(uploadModel); await socket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None); closed = true; } else if (receive.MessageType == WebSocketMessageType.Binary && uploadModel != null) { using (var writer = new BinaryWriter(new FileStream(Server.MapPath("~/" + uploadModel.UploadUrl), FileMode.Append))) { writer.Write(data, 0, receive.Count); await socket.SendAsync(new ArraySegment <byte>(Encoding.UTF8.GetBytes("{ \"received\": " + writer.BaseStream.Position + " }")), WebSocketMessageType.Text, true, CancellationToken.None); } } else { var receivedString = Encoding.UTF8.GetString(data, 0, receive.Count); uploadModel = JsonConvert.DeserializeObject <UploadEntry>(receivedString); var path = "/Content/Uploads/" + uploadModel.FileName; //path = Path.ChangeExtension(path, "png"); uploadModel.UploadUrl = path; IOWrapper.DeleteFileFromUploads(uploadModel.FileName); var output = new ArraySegment <byte>(Encoding.UTF8.GetBytes("{ \"accepted\": true }")); await socket.SendAsync(output, WebSocketMessageType.Text, true, CancellationToken.None); } } catch (Exception ex) { if (socket != null) { await socket.CloseAsync(WebSocketCloseStatus.InternalServerError, ex.Message, CancellationToken.None); } closed = true; } } }
public ActionResult Delete(string id) { IOWrapper.DeleteFileFromUploads(id); return(RedirectToAction("Index")); }