Ejemplo n.º 1
0
        void IStorageService.CreateObject(string bucket, string key, AWSMetadataEntry[] meta, byte[] data, AWSGrant acl)
        {
            Grant[]         acl2  = ConvertGrant(acl);
            MetadataEntry[] meta2 = ConvertMetadata(meta);
            DateTime        time  = GetCurrentTimeResolvedToMillis();
            string          sig   = MakeSignature("PutObjectInline", time);
            string          cred  = null;

            _service.PutObjectInline(bucket, key, meta2, data, data.Length, acl2, StorageClass.STANDARD, false, _accessKeyId, time, true, sig, cred);
        }
Ejemplo n.º 2
0
        Stream IStorageService.CreateObjectStream(string bucket, string key, long? size, AWSMetadataEntry[] meta, AWSGrant acl)
        {
            Grant[]         acl2  = ConvertGrant(acl);
            MetadataEntry[] meta2 = ConvertMetadata(meta);
            DateTime        time  = GetCurrentTimeResolvedToMillis();
            string          sig   = MakeSignature("PutObjectInline", time);
            string          cred  = null;

            return new SoapRequestStream(_service, bucket, key, meta2, acl2, _accessKeyId, time, sig, cred);
        }
Ejemplo n.º 3
0
        void IStorageService.CreateObject(string bucket, string key, AWSMetadataEntry[] meta, byte[] data, AWSGrant acl)
        {
            HttpWebRequest req = DoCreateObject(bucket, key, meta, acl);
            Stream         stm = req.GetRequestStream();

            try {
                stm.Write(data, 0, data.Length);
            } finally {
                stm.Close();
                req.GetResponse().Close();
            }
        }
        IDirectory IDirectory.CreateDirectory(string name)
        {
            AWSMetadataEntry[] meta = new AWSMetadataEntry[1];
            meta[0] = new AWSMetadataEntry();
            meta[0].MetaKey   = "content-type";
            meta[0].MetaValue = "text/plain";

            byte[] data = Encoding.UTF8.GetBytes("This is a directory.");

            CheckName(name);
            string fullname = DoGetFullName(name);
            _owner.Service.CreateObject(_owner.Bucket, fullname + "/" + DIRFILE, meta, data, _owner.Acl);
            return new DirectoryImpl(_owner, this, fullname, name);
        }
Ejemplo n.º 5
0
        Stream IStorageService.CreateObjectStream(string bucket, string key, long? size, AWSMetadataEntry[] meta, AWSGrant acl)
        {
            HttpWebRequest req = DoCreateObject(bucket, key, meta, acl);

            if(size.HasValue) {
                req.ContentLength = size.Value;
            }

            return new HttpRequestStream(req);
        }
Ejemplo n.º 6
0
 private string GetContentType(AWSMetadataEntry[] meta)
 {
     if(meta != null) {
         foreach(AWSMetadataEntry metaety in meta) {
             if(metaety.MetaKey.ToLower() == "content-type")
                 return metaety.MetaValue;
         }
     }
     return "";
 }
Ejemplo n.º 7
0
        private void DoGetObject(string bucket, string key, bool getmeta, bool getdata, out AWSObject obj, out HttpWebResponse res)
        {
            string time = GetCurrentTime();
            string s2s  = (getdata ? "GET\n" : "HEAD\n") +
                          "\n" +
                          "\n" +
                          "\n" +
                          "x-amz-date:" + time + "\n" +
                          HttpUtility.UrlPathEncode("/" + bucket + "/" + key);

            string sig = MakeSignature(s2s);

            HttpWebRequest req = (HttpWebRequest) WebRequest.Create(SERVICE_URL + HttpUtility.UrlPathEncode(bucket + "/" + key));
            req.Method                   = (getdata ? "GET" : "HEAD");
            req.ReadWriteTimeout         = -1;
            req.Timeout                  = -1;
            req.Headers["x-amz-date"]    = time;
            req.Headers["Authorization"] = "AWS " + _accessKeyId + ":" + sig;

            res = (HttpWebResponse) req.GetResponse();

            obj = new AWSObject();
            obj.Key          = key;
            obj.LastModified = res.LastModified;

            if(getmeta) {
                List<AWSMetadataEntry> retmeta = new List<AWSMetadataEntry>();
                foreach(string hdr in res.Headers.AllKeys) {
                    if(hdr.StartsWith("x-amz-meta-")) {
                        string mkey = hdr.Substring(11);
                        string mval = res.Headers[hdr];
                        if(mkey != "content-type") {
                            AWSMetadataEntry meta = new AWSMetadataEntry();
                            meta.MetaKey   = mkey;
                            meta.MetaValue = mval;
                            retmeta.Add(meta);
                        }
                    }
                }
                if(res.Headers["Content-Type"] != null) {
                    AWSMetadataEntry meta = new AWSMetadataEntry();
                    meta.MetaKey   = "Content-Type";
                    meta.MetaValue = res.Headers["Content-Type"];
                    retmeta.Add(meta);
                }
                obj.Metadata = retmeta.ToArray();
            } else {
                obj.Metadata = new AWSMetadataEntry[0];
            }

            if(getdata) {
                obj.Size = res.ContentLength;
            }
        }
Ejemplo n.º 8
0
        private HttpWebRequest DoCreateObject(string bucket, string key, AWSMetadataEntry[] meta, AWSGrant acl)
        {
            string acl2  = ConvertGrant(acl);
            string meta2 = ConvertMetadata4Sig(meta);
            //          string cmd5  = MakeHash(data);
            string ctyp  = GetContentType(meta);
            string time  = GetCurrentTime();
            string s2s   = "PUT\n" +
                          /* cmd5 + */ "\n" +
                          ctyp + "\n" +
                          "\n" +
                          "x-amz-acl:" + acl2 + "\n" +
                          "x-amz-date:" + time + "\n" +
                          meta2 +
                          HttpUtility.UrlPathEncode("/" + bucket + "/" + key);

            string sig = MakeSignature(s2s);

            HttpWebRequest req = (HttpWebRequest) WebRequest.Create(SERVICE_URL + HttpUtility.UrlPathEncode(bucket + "/" + key));
            req.Method                   = "PUT";
            req.ContentType              = ctyp;
            req.ReadWriteTimeout         = -1; // Not setting to -1 doesnt help a shit
            req.Timeout                  = -1;
            //          req.ContentLength            = data.Length;
            //          req.AllowWriteStreamBuffering = false; // Setting to false doesnt help a shit
            req.Headers["x-amz-acl"]     = acl2;
            req.Headers["x-amz-date"]    = time;
            req.Headers["Authorization"] = "AWS " + _accessKeyId + ":" + sig;

            if(meta != null) {
                foreach(AWSMetadataEntry metaety in meta) {
                    if(metaety.MetaKey.ToLower() != "content-type")
                        req.Headers["x-amz-meta-" + metaety.MetaKey.ToLower()] = metaety.MetaValue;
                }
            }

            return req;
        }
Ejemplo n.º 9
0
 private string ConvertMetadata4Sig(AWSMetadataEntry[] meta)
 {
     if(meta == null) {
         return "";
     } else {
         string ret = "";
         foreach(AWSMetadataEntry metaety in meta) {
             if(metaety.MetaKey.ToLower() != "content-type")
                 ret = ret + "x-amz-meta-" + metaety.MetaKey.ToLower() + ":" + metaety.MetaValue + "\n";
         }
         return ret;
     }
 }
Ejemplo n.º 10
0
 private MetadataEntry[] ConvertMetadata(AWSMetadataEntry[] meta)
 {
     if(meta != null) {
         MetadataEntry[] ret = new MetadataEntry[meta.Length];
         for(int idx = 0; idx < meta.Length; idx++) {
             string mkey = meta[idx].MetaKey;
             string mval = meta[idx].MetaValue;
             if(mkey.ToLower() != "content-type") {
                 mkey = mkey.ToLower();
             } else {
                 mkey = "Content-Type";
             }
             ret[idx] = new MetadataEntry();
             ret[idx].Name  = mkey;
             ret[idx].Value = mval;
         }
         return ret;
     } else {
         return null;
     }
 }
Ejemplo n.º 11
0
        private void btCreateObject_Click(object sender, EventArgs e)
        {
            try {
                OpenFileDialog fd = new OpenFileDialog();
                if(fd.ShowDialog() != DialogResult.OK) {
                    return;
                }

                Cursor = Cursors.WaitCursor;

                int    pos  = fd.FileName.LastIndexOf(".");
                string ext  = (pos == -1) ? "" : fd.FileName.Substring(pos).ToLower();
                string mime = "application/binary";;

                if(ext == ".htm" || ext == ".html") {
                    mime = "text/html";
                } else if(ext == ".xml" || ext == ".xsd" || ext == ".xsl" || ext == ".xslt") {
                    mime = "text/xml";
                } else if(ext == ".txt") {
                    mime = "text/plain";
                } else if(ext == ".jpg" || ext == ".jpeg") {
                    mime = "image/jpeg";
                } else if(ext == ".pdf") {
                    mime = "application/pdf";
                }

                AWSMetadataEntry[] meta = new AWSMetadataEntry[2];
                meta[0] = new AWSMetadataEntry();
                meta[0].MetaKey   = "CoNtEnT-TyPe";
                meta[0].MetaValue = mime;
                meta[1] = new AWSMetadataEntry();
                meta[1].MetaKey   = "Z-Application";
                meta[1].MetaValue = "ch.ph.AmazonUI";

                byte[] data;
                using(FileStream stm = new FileStream(fd.FileName, FileMode.Open, FileAccess.Read)) {
                    data = new byte[stm.Length];
                    stm.Read(data, 0, data.Length);
                }

                _service.CreateObject(uiBucket.Text, uiObject.Text, meta, data, _rights);

            } catch(Exception ex) {
                MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            } finally {
                Cursor = Cursors.Default;
            }
        }
        Stream IDirectory.CreateFileAndOpen(string name, long? size, string contentType, bool read, bool write)
        {
            if(read || !write) {
                throw new ArgumentException();
            }

            AWSMetadataEntry[] meta = null;
            if(contentType != null) {
                meta = new AWSMetadataEntry[1];
                meta[0] = new AWSMetadataEntry();
                meta[0].MetaKey   = "content-type";
                meta[0].MetaValue = contentType;
            }

            CheckName(name);
            string fullname = DoGetFullName(name);
            return _owner.Service.CreateObjectStream(_owner.Bucket, fullname, size, meta, _owner.Acl);
        }
 private static string GetMetaValue(AWSMetadataEntry[] meta, string metakey)
 {
     if(meta != null) {
         foreach(AWSMetadataEntry entry in meta) {
             if(entry.MetaKey.ToLower() == metakey.ToLower()) {
                 return entry.MetaValue;
             }
         }
     }
     return null;
 }