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); }
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); }
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); }
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); }
private string GetContentType(AWSMetadataEntry[] meta) { if(meta != null) { foreach(AWSMetadataEntry metaety in meta) { if(metaety.MetaKey.ToLower() == "content-type") return metaety.MetaValue; } } return ""; }
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; } }
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; }
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; } }
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; } }
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; }