예제 #1
0
 private bool TryGetCacheImageStream(string id, string imageUrl, out Stream outImageStream)
 {
     id = $"$/{id}";
     if (_fileStorage.Exists(id))
     {
         var file   = _fileStorage.FindById(id);
         var stream = new MemoryStream((int)file.Length);
         try
         {
             file.CopyTo(stream);
             stream.Seek(0, SeekOrigin.Begin);
             _fileStorage.SetMetadata(id, new BsonDocument(new Dictionary <string, BsonValue>()
             {
                 { "updateAt", DateTime.Now }
             }));
             outImageStream = stream;
             return(true);
         }
         catch
         {
             stream.Dispose();
             throw;
         }
     }
     else
     {
         outImageStream = null;
         return(false);
     }
 }
예제 #2
0
        public async Task <Stream> GetImageAsync(string path)
        {
            try
            {
                if (path.StartsWith("/"))
                {
                    return(await ImageClient.GetStreamAsync("original" + path));
                }
                else if (!path.StartsWith("w"))
                {
                    return(await YouTubeClient.GetStreamAsync(String.Format("{0}/0.jpg", path)));
                }

                string       id       = path.ComputeHash();
                LiteFileInfo fileInfo = FileStorage.FindById(id);
                if (fileInfo == null)
                {
                    try
                    {
                        using (Stream stream = await ImageClient.GetStreamAsync(path))
                        {
                            if (stream != null)
                            {
                                using (MemoryStream memoryStream = new MemoryStream())
                                {
                                    stream.CopyTo(memoryStream);
                                    if (memoryStream.Length > 0)
                                    {
                                        memoryStream.Position = 0;
                                        fileInfo = FileStorage.Upload(id, path, memoryStream);
                                    }
                                }
                            }
                        }
                    }
                    catch (Exception)
                    {
                        return(null);
                    }
                }

                if (fileInfo == null)
                {
                    return(null);
                }

                MemoryStream cachedStream = new MemoryStream();
                fileInfo.CopyTo(cachedStream);
                cachedStream.Position = 0;

                return(cachedStream);
            }
            catch (Exception)
            {
                return(null);
            }
        }
예제 #3
0
        public TFile Get(String idOrName)
        {
            LiteFileInfo fileInfo = _fileStorage.FindById(idOrName);

            if (fileInfo == null)
            {
                return(null);
            }

            return(fileInfo.ToStorageFile <TFile>());
        }
예제 #4
0
        public IEnumerable <BsonValue> Execute(StringScanner s, LiteEngine engine)
        {
            var fs       = new LiteStorage(engine);
            var id       = this.ReadId(s);
            var filename = s.Scan(@"\s*.*").Trim();

            var file = fs.FindById(id);

            if (file != null)
            {
                file.SaveAs(filename);

                yield return(file.AsDocument);
            }
        }
예제 #5
0
파일: Download.cs 프로젝트: apkd/LiteDB
        public void Execute(LiteEngine engine, StringScanner s, Display display, InputCommand input, Env env)
        {
            var fs = new LiteStorage(engine);
            var id = this.ReadId(s);
            var filename = s.Scan(@"\s*.*").Trim();

            var file = fs.FindById(id);

            if (file != null)
            {
                file.SaveAs(filename);

                display.WriteResult(file.AsDocument);
            }
        }
예제 #6
0
        public void Execute(LiteEngine engine, StringScanner s, Display display, InputCommand input, Env env)
        {
            var fs       = new LiteStorage(engine);
            var id       = this.ReadId(s);
            var filename = s.Scan(@"\s*.*").Trim();

            var file = fs.FindById(id);

            if (file != null)
            {
                file.SaveAs(filename);

                display.WriteResult(file.AsDocument);
            }
        }