//sql tranzakcióban működik, kis fájlok legyenek public static async Task FeltoltesAsync(ossContext context, string sid, FajlBuf fajlBuf) { var entityDokumentum = await BejegyzesAsync(context, sid, fajlBuf); BejegyzesFajl(entityDokumentum); FeltoltesFajl(entityDokumentum, fajlBuf); }
public static void FeltoltesFajl(Models.Dokumentum entityDokumentum, FajlBuf fajlBuf) { var fajlnev = GetFajlnev(entityDokumentum); if (!File.Exists(fajlnev)) { throw new Exception("A dokumentumhoz tartozó fájl nincs létrehozva!"); } var fi = new FileInfo(fajlnev); if (fi.Length + fajlBuf.b.Length > entityDokumentum.Meret) { throw new Exception("A dokumentumhoz tartozó fájlhoz már nem illeszthető ennyi bájt...!"); } FileStream fs = null; try { fs = new FileStream(fajlnev, FileMode.Append, FileAccess.Write); fs.Write(fajlBuf.b, 0, fajlBuf.b.Length); } finally { fs?.Close(); } }
public async Task <Int32Result> Bejegyzes([FromQuery] string sid, [FromBody] FajlBuf fajlbuf) { var result = new Int32Result(); using (var tr = await _context.Database.BeginTransactionAsync()) try { var entityDokumentum = await DokumentumBll.BejegyzesAsync(_context, sid, fajlbuf); tr.Commit(); try { result.Result = DokumentumBll.BejegyzesFajl(entityDokumentum); } catch (Exception ef) { result.Error = ef.InmostMessage(); } } catch (Exception ex) { tr.Rollback(); result.Error = ex.InmostMessage(); } return(result); }
public static FajlBuf LetoltesFajl(Models.Dokumentum entityDokumentum, int kezdoPozicio, int olvasando) { var fajlnev = GetFajlnev(entityDokumentum); if (!File.Exists(fajlnev)) { throw new Exception("A dokumentumhoz tartozó fájl nem érhető el!"); } var fi = new FileInfo(fajlnev); if (kezdoPozicio > fi.Length - 1) { throw new Exception("Hibás pozíció!"); } FajlBuf fajlBuf; FileStream fs = null; try { fs = new FileStream(fajlnev, FileMode.Open, FileAccess.Read); var olvashato = (int)fs.Length - kezdoPozicio; if (olvashato < olvasando) { olvasando = olvashato; } var b = new byte[olvasando]; fs.Seek(kezdoPozicio, SeekOrigin.Begin); fs.Read(b, 0, olvasando); fajlBuf = new FajlBuf { b = b, Ext = entityDokumentum.Ext, Hash = entityDokumentum.Hash, IratKod = entityDokumentum.Iratkod, Megjegyzes = entityDokumentum.Megjegyzes }; } finally { fs?.Close(); } return(fajlBuf); }
public async Task <Int32Result> FeltoltesAngular([FromQuery] string sid, [FromBody] FajlBuf par) { var result = new Int32Result(); using (var tr = await _context.Database.BeginTransactionAsync()) try { par.Hash = Crypt.MD5Hash(par.b); // a kliensen kellene készíteni... par.Ext = Path.GetExtension(par.Fajlnev); if (string.IsNullOrEmpty(par.Megjegyzes)) { par.Megjegyzes = Path.GetFileNameWithoutExtension(par.Fajlnev); } var entityDokumentum = await DokumentumBll.BejegyzesAsync(_context, sid, par); tr.Commit(); try { DokumentumBll.BejegyzesFajl(entityDokumentum); DokumentumBll.FeltoltesFajl(entityDokumentum, par); result.Result = entityDokumentum.Dokumentumkod; } catch (Exception ef) { result.Error = ef.InmostMessage(); } } catch (Exception ex) { tr.Rollback(); result.Error = ex.InmostMessage(); } return(result); }
public static async Task <Models.Dokumentum> BejegyzesAsync(ossContext context, string sid, FajlBuf fajlBuf) { const int minSize = 100 * 1024 * 1024; SessionBll.Check(context, sid); await CsoportDal.JogeAsync(context, JogKod.IRAT); Models.Volume entityVolume; int ujFajlMerete = fajlBuf.Meret; // lock-ban nem lehet async var entityParticio = await ParticioDal.GetAsync(context); var vc = JsonConvert.DeserializeObject <VolumeConf>(entityParticio.Volume); var Eleresiut = vc.UjvolumeEleresiut ?? throw new Exception(string.Format(Messages.ParticioHiba, "UjvolumeEleresiut")); if (!Directory.Exists(Eleresiut)) { throw new Exception($"UjvolumeEleresiut: nem létező könyvtár: {Eleresiut}!"); } var Maxmeret = vc.UjvolumeMaxmeret != null ? (int)vc.UjvolumeMaxmeret : throw new Exception(string.Format(Messages.ParticioHiba, "UjvolumeMaxmeret")); if (Maxmeret < minSize) { throw new Exception($"UjvolumeMaxmeret: az érték legyen nagyobb, mint {minSize} - jelenleg {Maxmeret}!"); } lock (LockMe) { var lstVolume = VolumeDal.ReadElegSzabadHely(context, ujFajlMerete); if (lstVolume.Count > 0) { entityVolume = lstVolume[0]; if (++entityVolume.Fajlokszamautolsokonyvtarban > 100) { ++entityVolume.Utolsokonyvtar; entityVolume.Fajlokszamautolsokonyvtarban = 1; } entityVolume.Jelenlegimeret += ujFajlMerete; //ezt lehetne okosítani... if ((entityVolume.Maxmeret - entityVolume.Jelenlegimeret) < (10 * 1024 * 1024)) { entityVolume.Allapot = KotetAllapot.Closed.ToString(); } entityVolume.Allapotkelte = DateTime.Now; VolumeDal.Update(context, entityVolume); } else { entityVolume = new Models.Volume { Particiokod = (int)context.CurrentSession.Particiokod, Volumeno = context.KodGen(KodNev.Volume), Eleresiut = Eleresiut, Maxmeret = Maxmeret, Jelenlegimeret = ujFajlMerete, Utolsokonyvtar = 1, Fajlokszamautolsokonyvtarban = 1, Allapot = KotetAllapot.Opened.ToString(), Allapotkelte = DateTime.Now }; VolumeDal.Add(context, entityVolume); } } var entityDokumentum = new Models.Dokumentum { Volumekod = entityVolume.Volumekod, Konyvtar = entityVolume.Utolsokonyvtar, Meret = ujFajlMerete, Ext = fajlBuf.Ext, Hash = fajlBuf.Hash, Iratkod = fajlBuf.IratKod, Megjegyzes = fajlBuf.Megjegyzes }; var dokumentumKod = await DokumentumDal.AddAsync(context, entityDokumentum); return(await DokumentumDal.GetWithVolumeAsync(context, dokumentumKod)); }