Example #1
0
        //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);
        }
Example #2
0
        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);
        }
Example #4
0
        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);
        }
Example #6
0
        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));
        }