public ActionResult ViewFiles(string stockFileId)
        {
            var manager = new StockManager();
            StockDetails stockDetails = new StockDetails();
            stockDetails.StockFilesViewModel = manager.GetStockFile(stockFileId);

            byte[] byteArray = Encoding.UTF8.GetBytes(stockDetails.StockFilesViewModel.File);
            FileTypeFactory fileFactory = new FileTypeFactory();
            FileType fileTypeClass = fileFactory.FileTypes(stockDetails.StockFilesViewModel.Format.ToLower());
            string fileType = fileTypeClass.GetFileType();
            return File(byteArray, fileType);
        }
Ejemplo n.º 2
0
        public void ProcessRequest(HttpContext context)
        {
            var filename = context.Server.MapPath(context.Request.FilePath);
            var response = context.Response;

            if (!File.Exists(filename))
            {
                response.StatusCode = 404;
                return;
            }

            var fileType  = FileTypeFactory.GetFileType(filename);
            var cacheFile = GetCacheFileName(context.Request.FilePath);

            context.Response.AddHeader("Minified", "1");
            context.Response.Cache.SetCacheability(HttpCacheability.Public);
            context.Response.AddFileDependency(filename);
            context.Response.Cache.SetLastModifiedFromFileDependencies();
            context.Response.Cache.SetETagFromFileDependencies();
            context.Response.Cache.SetExpires(DateTime.Now.AddDays(365)); // expire in a year
            context.Response.Cache.VaryByHeaders["Accept-encoding"] = true;
            response.ContentType = fileType.MimeType;

            // if we can fetch from cache do that
            var cache = fileType.CacheProvider;

            if (cache.IsValid(filename, cacheFile))
            {
                var cachedResponse = cache.Fetch(cacheFile);
                response.AddHeader("Content-Encoding", fileType.CompressionProvider.ContentEncoding);
                response.BinaryWrite(cachedResponse);
                return;
            }

            // get file contents
            var responseBytes = File.ReadAllBytes(filename);

            if (filename.IndexOf(".min.", StringComparison.Ordinal) < 0)
            {
                // files with .min. in the name have had specialist minify routines run on them
                responseBytes = fileType.MinifyProvider.Minify(responseBytes);
            }
            responseBytes = fileType.CompressionProvider.Compress(responseBytes);
            cache.Create(responseBytes, cacheFile);
            if (!String.IsNullOrEmpty(fileType.CompressionProvider.ContentEncoding))
            {
                response.AddHeader("Content-Encoding", fileType.CompressionProvider.ContentEncoding);
            }
            response.BinaryWrite(responseBytes);
        }