private CacheMetaData CacheFile(HttpWebResponse resp, string fileName) { var etag = resp.Headers[HttpResponseHeader.ETag]; string md5; if (etag != null) { md5 = etag.Split(':')[0].Substring(1); } else { md5 = "0"; } CacheMetaData meta = new CacheMetaData(resp.ContentLength, md5); _metaData[fileName] = meta; using (var sw = File.AppendText(Path.Combine(CachePath, "cache.meta"))) { sw.WriteLine(string.Format("{0} {1} {2}", fileName, resp.ContentLength, md5.ToUpper())); } return(meta); }
public void DownloadFile(string url, string path) { Directory.CreateDirectory(Path.GetDirectoryName(path)); //using (var client = new HttpClient()) //{ // var msg = client.GetAsync(url).Result; // using (Stream fs = new FileStream(path, FileMode.Create, FileAccess.Write)) // { // //CacheMetaData.AddToCache(resp, path); // //CopyToStream(stream, fs, resp.ContentLength); // msg.Content.CopyToAsync(fs).Wait(); // } //} HttpWebRequest request = WebRequest.CreateHttp(url); using (HttpWebResponse resp = (HttpWebResponse)request.GetResponseAsync().Result) using (Stream stream = resp.GetResponseStream()) using (Stream fs = new FileStream(path, FileMode.Create, FileAccess.Write)) { CacheMetaData.AddToCache(resp, path); CopyToStream(stream, fs, resp.ContentLength); } }
public static CacheMetaData AddToCache(HttpWebResponse resp, string file) { string md5 = resp.Headers[HttpResponseHeader.ETag].Split(':')[0].Substring(1); CacheMetaData meta = new CacheMetaData(resp.ContentLength, md5.ToByteArray()); meta.Save(file); return(meta); }
public MemoryStream OpenFile(string name, string url, bool isData) { if (!Enabled) { return(null); } if (isData && !CacheData) { return(null); } string file = Path.Combine(_cachePath, name); FileInfo fi = new FileInfo(file); if (!fi.Exists) { _downloader.DownloadFile(url, file); } if (Validate) { CacheMetaData meta = CacheMetaData.Load(file) ?? _downloader.GetMetaData(url, file); if (meta == null) { throw new Exception(string.Format("unable to validate file {0}", file)); } bool sizeOk, md5Ok; using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { sizeOk = fs.Length == meta.Size; md5Ok = _md5.ComputeHash(fs).EqualsTo(meta.MD5); } if (!sizeOk || !md5Ok) { _downloader.DownloadFile(url, file); } } MemoryStream ms = new MemoryStream(); using (FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) fileStream.CopyTo(ms); return(ms); }
public CacheMetaData GetMetaData(string url, string file) { try { HttpWebRequest request = WebRequest.CreateHttp(url); request.Method = "HEAD"; using (HttpWebResponse resp = (HttpWebResponse)request.GetResponseAsync().Result) { return(CacheMetaData.AddToCache(resp, file)); } } catch { return(null); } }
private CDNCache(CASCConfig config) { if (Enabled) { _config = config; string metaFile = Path.Combine(CachePath, "cache.meta"); _metaData = new Dictionary <string, CacheMetaData>(StringComparer.OrdinalIgnoreCase); if (File.Exists(metaFile)) { var lines = File.ReadLines(metaFile); foreach (var line in lines) { string[] tokens = line.Split(' '); _metaData[tokens[0]] = new CacheMetaData(Convert.ToInt64(tokens[1]), tokens[2]); } } } }