private void ListCurrentFiles(HttpContext context)
        {
            var bucket = ConfigurationManager.AppSettings["Assets_Amazon_Bucket"];

            var prefix  = GetPrefix(context);
            var doctype = context.Request["doctype"];
            var files   = new List <AmazonFilesStatus>();
            var client  = AmazonHelper.GetS3Client();
            var request = new ListObjectsRequest().WithBucketName(bucket).WithDelimiter("/").WithPrefix(prefix);

            var l = client.ListObjects(request);

            foreach (var fl in l.S3Objects)
            {
                if (fl.Size > 0)
                {
                    if (String.IsNullOrWhiteSpace(doctype) || (doctype == getDocType(fl.Key)))
                    {
                        var fs = new AmazonFilesStatus(fl, bucket, prefix);
                        files.Add(fs);
                    }
                }
            }
            var typeObj = new Dictionary <String, String>();

            typeObj.Add("doc", AmazonHelper.DocExtensions());
            typeObj.Add("image", AmazonHelper.ImgExtensions());
            typeObj.Add("media", AmazonHelper.MediaExtensions());
            var retObj = new FileReturn()
            {
                Files = files, AssetTypes = typeObj
            };

            string jsonObj = js.Serialize(retObj);

            context.Response.AddHeader("Content-Disposition", "inline, filename=\"files.json\"");
            context.Response.Write(jsonObj);
            context.Response.ContentType = "application/json";
        }
        // Upload entire file
        private void UploadWholeFile(HttpContext context, List<AmazonFilesStatus> statuses)
        {
            for (int i = 0; i < context.Request.Files.Count; i++) {
                var file = context.Request.Files[i];

                MemoryStream thumbStream = new MemoryStream();
                var fileExt = file.FileName.Remove(0,file.FileName.LastIndexOf('.')).ToLower();
                var needsThumb =  Regex.Match(file.FileName.ToLower(),AmazonHelper.ImgExtensions()).Success;
                var keyName = GetKeyName(context,file.FileName.ToLower());
                var len = file.ContentLength;
                var height = 0;
                var width = 0;
                if(needsThumb){

                    file.InputStream.CopyTo(thumbStream);
                }
                var client = AmazonHelper.GetS3Client();
                var request = new PutObjectRequest()
                                        .WithKey(keyName)
                                        .WithBucketName(StorageRoot)
                                        .WithContentType(file.ContentType)
                                        .WithCannedACL(S3CannedACL.PublicRead)
                                        .WithAutoCloseStream(true)
                                        .WithStorageClass(S3StorageClass.ReducedRedundancy)
                                        .WithInputStream(file.InputStream);
                if (needsThumb)
                {
                    Image img = Image.FromStream(thumbStream);
                    height = img.Height;
                    width = img.Width;
                    thumbStream.Position = 0;

                    request.AddHeader("x-amz-meta-width",width.ToString());
                    request.AddHeader("x-amz-meta-height",height.ToString());
                    var orientation = width > height ? "h" : "v";
                    request.AddHeader("x-amz-meta-orient",orientation);

                }

                var response = client.PutObject((PutObjectRequest)request);
                response.Dispose();
                if(needsThumb){

                    var thumbKeyName = VirtualPathUtility.RemoveTrailingSlash(keyName.Replace(file.FileName.ToLower(),"")) + "/thumbs/" + file.FileName.ToLower().Replace(fileExt,".png");
                    var thumbImageStream = GetThumbnail(thumbStream);
                    var thumbrequest = new PutObjectRequest()
                                            .WithKey(thumbKeyName)
                                            .WithBucketName(StorageRoot)
                                            .WithContentType("image/png")
                                            .WithCannedACL(S3CannedACL.PublicRead)
                                            .WithAutoCloseStream(true)
                                            .WithStorageClass(S3StorageClass.ReducedRedundancy)
                                            .WithInputStream(thumbImageStream);

                    var thumbresponse = client.PutObject((PutObjectRequest)thumbrequest);
                    thumbStream.Dispose();
                }
                var fileStatus = new AmazonFilesStatus(file.FileName.ToLower(),StorageRoot,GetPrefix(context),len,height,width );

                //string fullName = Path.GetFileName(file.FileName);
                statuses.Add(fileStatus);
            }
        }
        // Upload entire file
        private void UploadWholeFile(HttpContext context, List <AmazonFilesStatus> statuses)
        {
            for (int i = 0; i < context.Request.Files.Count; i++)
            {
                var file = context.Request.Files[i];

                MemoryStream thumbStream = new MemoryStream();
                var          fileExt     = file.FileName.Remove(0, file.FileName.LastIndexOf('.')).ToLower();
                var          needsThumb  = Regex.Match(file.FileName.ToLower(), AmazonHelper.ImgExtensions()).Success;
                var          keyName     = GetKeyName(context, file.FileName.ToLower());
                var          len         = file.ContentLength;
                var          height      = 0;
                var          width       = 0;
                if (needsThumb)
                {
                    file.InputStream.CopyTo(thumbStream);
                }
                var client  = AmazonHelper.GetS3Client();
                var request = new PutObjectRequest()
                              .WithKey(keyName)
                              .WithBucketName(StorageRoot)
                              .WithContentType(file.ContentType)
                              .WithCannedACL(S3CannedACL.PublicRead)
                              .WithAutoCloseStream(true)
                              .WithStorageClass(S3StorageClass.ReducedRedundancy)
                              .WithInputStream(file.InputStream);
                if (needsThumb)
                {
                    Image img = Image.FromStream(thumbStream);
                    height = img.Height;
                    width  = img.Width;
                    thumbStream.Position = 0;

                    request.AddHeader("x-amz-meta-width", width.ToString());
                    request.AddHeader("x-amz-meta-height", height.ToString());
                    var orientation = width > height ? "h" : "v";
                    request.AddHeader("x-amz-meta-orient", orientation);
                }

                var response = client.PutObject((PutObjectRequest)request);
                response.Dispose();
                if (needsThumb)
                {
                    var thumbKeyName     = VirtualPathUtility.RemoveTrailingSlash(keyName.Replace(file.FileName.ToLower(), "")) + "/thumbs/" + file.FileName.ToLower().Replace(fileExt, ".png");
                    var thumbImageStream = GetThumbnail(thumbStream);
                    var thumbrequest     = new PutObjectRequest()
                                           .WithKey(thumbKeyName)
                                           .WithBucketName(StorageRoot)
                                           .WithContentType("image/png")
                                           .WithCannedACL(S3CannedACL.PublicRead)
                                           .WithAutoCloseStream(true)
                                           .WithStorageClass(S3StorageClass.ReducedRedundancy)
                                           .WithInputStream(thumbImageStream);

                    var thumbresponse = client.PutObject((PutObjectRequest)thumbrequest);
                    thumbStream.Dispose();
                }
                var fileStatus = new AmazonFilesStatus(file.FileName.ToLower(), StorageRoot, GetPrefix(context), len, height, width);

                //string fullName = Path.GetFileName(file.FileName);
                statuses.Add(fileStatus);
            }
        }
        private void ListCurrentFiles(HttpContext context)
        {
            var bucket = ConfigurationManager.AppSettings["Assets_Amazon_Bucket"];

            var prefix = GetPrefix(context);
            var doctype = context.Request["doctype"];
            var files = new List<AmazonFilesStatus>();
            var client = AmazonHelper.GetS3Client();
            var request = new ListObjectsRequest().WithBucketName(bucket).WithDelimiter("/").WithPrefix(prefix);

            var l = client.ListObjects(request);
            foreach (var fl in l.S3Objects)
            {

                if(fl.Size > 0)
                {
                    if(String.IsNullOrWhiteSpace(doctype) || (doctype == getDocType(fl.Key)))
                    {
                        var fs = new AmazonFilesStatus(fl,bucket,prefix);
                        files.Add(fs);
                    }
                }

            }
            var typeObj = new Dictionary<String,String>();
            typeObj.Add("doc",AmazonHelper.DocExtensions());
            typeObj.Add("image",AmazonHelper.ImgExtensions());
            typeObj.Add("media",AmazonHelper.MediaExtensions());
            var retObj = new FileReturn(){Files = files,AssetTypes = typeObj};

            string jsonObj = js.Serialize(retObj);
            context.Response.AddHeader("Content-Disposition", "inline, filename=\"files.json\"");
            context.Response.Write(jsonObj);
            context.Response.ContentType = "application/json";
        }