Exemplo n.º 1
0
        public async Task CacheContent <T>(string key, T content, ICacheInfo cacheInfo)
        {
            using (var ms = new MemoryStream())
                using (var sw = new StreamWriter(ms))
                    using (var jw = new JsonTextWriter(sw))
                    {
                        var serializer = new JsonSerializer();
                        var now        = DateTime.UtcNow;

                        serializer.ContractResolver = new DefaultContractResolver {
                            NamingStrategy = new SnakeCaseNamingStrategy()
                        };
                        serializer.Serialize(jw, content);
                        await sw.FlushAsync();

                        var putReq = new PutObjectRequest
                        {
                            BucketName  = BucketName,
                            Key         = key,
                            ContentType = "application/json",

                            // We use the StreamWriter BaseStream, as apparently using a
                            // MemoryStream breaks this part and only uploads an initial partial
                            // segment of the data? F**k knows
                            InputStream = sw.BaseStream,
                        };

                        putReq.Metadata["content-expiration"] = cacheInfo.ExpiresAt?.ToISOString();
                        putReq.Metadata["content-creation"]   = cacheInfo.CachedAt.ToISOString();
                        putReq.Metadata["content-hash"]       = Sha256.HashContent(ms).ToHexString();

                        await Client.PutObjectAsync(putReq);
                    }
        }