public string put(string bucket, string key, S3Object obj) { SortedList metadata = null; SortedList headers = null; if (obj != null) { metadata = obj.Metadata; } return generateURL("PUT", bucket, HttpUtility.UrlEncode(key), mergeMeta(headers, metadata)); }
/// <summary> /// Creates a new bucket. /// </summary> /// <param name="bucket">The name of the bucket to create</param> /// <param name="headers">A Map of string to string representing the headers to pass (can be null)</param> public Response createBucket(string bucket) { S3Object obj = new S3Object("", null); WebRequest request = makeRequest("PUT", bucket, "", null, obj); request.ContentLength = 0; request.GetRequestStream().Close(); return new Response(request); }
private void putToS3 ( Dictionary<string, MemoryStream> imageDictionary, string baseFileName ) { m_logWriter.WriteLine("Beginning Put Process of {0}", baseFileName); //long requestExpires = DateTime.UtcNow.AddMinutes(1).Subtract(new DateTime(1970, 1, 1)).Ticks; //QueryStringAuthGenerator authGenerator = new QueryStringAuthGenerator(false, "s3.amazonaws.com", 80, CallingFormat.REGULAR); //authGenerator.Expires = requestExpires; SortedList headerList = new SortedList(); headerList.Add("Content-Type", "image/jpeg"); headerList.Add("X-Amz-acl", "public-read"); AWSAuthConnection awsConnection = new AWSAuthConnection(Environment.GetEnvironmentVariable("S3_ACCESS_KEY"), Environment.GetEnvironmentVariable("S3_SECRET_KEY"), false, "s3.amazonaws.com", 80, CallingFormat.REGULAR); string baseFileKey = SubstringAfter(SubstringBefore(baseFileName.ToLower(), "."), "/"); IEnumerator images = imageDictionary.GetEnumerator(); while (images.MoveNext()) { KeyValuePair<string, MemoryStream> keyValuePair = (KeyValuePair<string, MemoryStream>)images.Current; string fileName = String.Format("{0}-{1}.jpg", baseFileKey, m_lookupTable[keyValuePair.Key]); S3Object s3object = new S3Object(keyValuePair.Value.GetBuffer(), new SortedList()); bool keepTrying = true; int trys = 0; int maxRetryAttempts = 10; do { try { Response webRequest = awsConnection.put(m_s3bucket, fileName, s3object, headerList); Console.WriteLine("PUT {0} to S3 with response: {1}", fileName, webRequest.getResponseMessage()); keepTrying = false; } catch (Exception e) { if (trys == maxRetryAttempts) { keepTrying = false; } else { trys++; } } } while (keepTrying); //XmlReader webResponseReader = null; //try { // webRequest // //webRequest = AWSAuthConnection.MakeRequest("PUT", "storage.iact.com", fileName, headerList, s3object, signedKey, m_s3PublicKey, requestExpires/1000); //} catch (Exception e) { // //webResponseReader = XmlReader.Create(webRequest.GetResponse().GetResponseStream()); // Console.WriteLine("Error response from S3: {0} with error: {1}", e.Message, webRequest.getResponseMessage()); //} //webResponseReader = XmlReader.Create(webRequest.GetResponse().GetResponseStream()); } }
/// <summary> /// Make a new WebRequest /// </summary> /// <param name="method">The HTTP method to use (GET, PUT, DELETE)</param> /// <param name="bucket">The bucket name for this request</param> /// <param name="key">The key this request is for</param> /// <param name="headers">A map of string to string representing the HTTP headers to pass (can be null)</param> /// <param name="obj">S3Object that is to be written (can be null).</param> private WebRequest makeRequest(string method, string bucket, string key, SortedList query, SortedList headers, S3Object obj) { StringBuilder url = new StringBuilder(); url.Append(isSecure ? "https://" : "http://"); url.Append(Utils.buildUrlBase(server, port, bucket, callingFormat)); if (key != null && key.Length != 0) { url.Append(key); } // build the query string parameter url.Append(Utils.convertQueryListToQueryString(query)); WebRequest req = WebRequest.Create(url.ToString()); if (req is HttpWebRequest) { HttpWebRequest httpReq = req as HttpWebRequest; httpReq.AllowWriteStreamBuffering = false; } req.Method = method; addHeaders(req, headers); if (obj != null) addMetadataHeaders(req, obj.Metadata); addAuthHeader(req, bucket, key, query); return req; }
/// <summary> /// Make a new WebRequest with an S3Object. /// </summary> private WebRequest makeRequest(string method, string bucket, string key, SortedList headers, S3Object obj) { return makeRequest(method, bucket, key, new SortedList(), headers, obj); }
/// <summary> /// Write a new ACL for a given object /// </summary> /// <param name="bucket">The name of the bucket where the object lives or the /// name of the bucket to change the ACL if key is null.</param> /// <param name="key">The name of the key to use; can be null.</param> /// <param name="aclXMLDoc">An XML representation of the ACL as a string.</param> /// <param name="headers">A map of string to string representing the HTTP headers to pass (can be null)</param> public Response putACL(string bucket, string key, string aclXMLDoc, SortedList headers) { S3Object obj = new S3Object(aclXMLDoc, null); if (key == null) key = ""; SortedList query = new SortedList(); query.Add("acl", ""); WebRequest request = makeRequest("PUT", bucket, encodeKeyForSignature(key), query, headers, obj); request.ContentLength = aclXMLDoc.Length; request.GetRequestStream().Write(obj.Bytes, 0, obj.Bytes.Length); request.GetRequestStream().Close(); return new Response(request); }
/// <summary> /// Write a new logging xml document for a given bucket /// </summary> /// <param name="bucket">The name of the bucket to enable/disable logging on</param> /// <param name="loggingXMLDoc">The xml representation of the logging configuration as a String.</param> /// <param name="headers">A map of string to string representing the HTTP headers to pass (can be null)</param> public Response putBucketLogging(string bucket, string loggingXMLDoc, SortedList headers) { S3Object obj = new S3Object(loggingXMLDoc, null); SortedList query = new SortedList(); query.Add("logging", ""); WebRequest request = makeRequest("PUT", bucket, "", query, headers, obj); request.ContentLength = loggingXMLDoc.Length; request.GetRequestStream().Write(obj.Bytes, 0, obj.Bytes.Length); request.GetRequestStream().Close(); return new Response(request); }
/// <summary> /// Writes an object to S3. /// </summary> /// <param name="bucket">The name of the bucket to which the object will be added.</param> /// <param name="key">The name of the key to use</param> /// <param name="obj">An S3Object containing the data to write.</param> /// <param name="headers">A map of string to string representing the HTTP headers to pass (can be null)</param> public Response put(string bucket, string key, S3Object obj, SortedList headers) { WebRequest request = makeRequest("PUT", bucket, encodeKeyForSignature(key), headers, obj); request.ContentLength = obj.Bytes.Length; using (Stream _stream = request.GetRequestStream()) { _stream.Write(obj.Bytes, 0, obj.Bytes.Length); return new Response(request); } }