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));
 }
Exemple #2
0
 /// <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());
            }
        }
Exemple #4
0
        /// <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;

        }
Exemple #5
0
 /// <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);
 }
Exemple #6
0
        /// <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);
        }
Exemple #7
0
        /// <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);
        }
Exemple #8
0
        /// <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);
            }
        }