private void StartAsyncTask(Object workItemState) { HttpRequest request = _context.Request; byte[] buffer = new byte[request.ContentLength]; string fullFileName = Uri.UnescapeDataString(request.Headers["X-File-Name"]); string fileName = Path.GetFileNameWithoutExtension(fullFileName); string fileExt = Path.GetExtension(fullFileName); string documentIdStr = request["documentid"]; int fileId = 0; Stream inputStream; if (String.IsNullOrEmpty(fullFileName) && request.Files.Count <= 0) { _context.Response.Write("{success:false}"); } else { try { if (fullFileName == null) { inputStream = request.Files[0].InputStream; fullFileName = Path.GetFileName(request.Files[0].FileName); fileName = Path.GetFileNameWithoutExtension(fullFileName); fileExt = Path.GetExtension(fullFileName); } else { inputStream = request.InputStream; } using (BinaryReader br = new BinaryReader(inputStream)) br.Read(buffer, 0, buffer.Length); long hashCode = FileVFS.ComputeHash(buffer); SqlConnection connection = new SqlConnection(Config.ConnectionString); try { connection.Open(); SqlTransaction trans = null; try { trans = connection.BeginTransaction(); bool existSameName = FileVFS.Exists(trans, fullFileName, 0); if (existSameName) { fileId = FileVFS.GetFileID(trans, fullFileName, hashCode, 0); } if (fileId <= 0) { if (existSameName) { fullFileName = fileName + "_" + hashCode + fileExt; } existSameName = FileVFS.Exists(trans, fullFileName, 0); if (existSameName) { fileId = FileVFS.GetFileID(trans, fullFileName, hashCode, 0); } } if (fileId <= 0) { FileVFS fileVFS = new FileVFS(Config.ConnectionString, fullFileName, 0, buffer); fileVFS.Create(trans); fileId = fileVFS.ID; } if (fileId > 0 && !String.IsNullOrWhiteSpace(documentIdStr)) { int documentID; if (int.TryParse(documentIdStr, out documentID) && documentID > 0) { DocumentFile df = new DocumentFile(Worker); df.FileID = fileId; df.DocumentID = documentID; df.Insert(trans); } } trans.Commit(); } catch (Exception) { if (trans != null) { trans.Rollback(); } throw; } } finally { connection.Close(); } _context.Response.Write(String.Format("{{ success: true, fileID: {0}, fileName: '{1}'}}", fileId, fullFileName)); _context.Response.Flush(); } catch (Exception e) { _context.Response.Write("{ success: false, error:\"" + e.Message + "\" }"); } } _completed = true; _callback(this); }