public static void Upload(Stream stream, String objectName) { S3Service service = GetService(); long len = stream.Position; stream.Seek(0, SeekOrigin.Begin); AddObjectRequest req = new AddObjectRequest(service, Program.Config.BucketName, objectName) { CannedAcl = CannedAcl.PublicRead, ContentType = "image/" + Program.Config.ImageType, ContentLength = len }; IAsyncResult uploadAsync = req.BeginGetRequestStream(a => { using (Stream outStream = req.EndGetRequestStream(a)) { try { var buffer = new byte[len > 65536 ? 65536 : len]; var position = 0; while (position < stream.Length) { var read = stream.Read(buffer, 0, buffer.Length); outStream.Write(buffer, 0, read); position += read; } outStream.Flush(); stream.Close(); stream.Dispose(); stream = null; buffer = null; using (AddObjectResponse response = req.GetResponse()) { string url = null; if (Program.Config.CloudFront != null && Program.Config.CloudFront.Length > 0) { url = "http://" + Program.Config.CloudFront + "/" + objectName; } else { url = "http://" + Program.Config.Region + "/" + Program.Config.BucketName + "/" + objectName; } FormMain.DefaultInstance.Invoke((MethodInvoker) delegate { FormMain.DefaultInstance.UploadComplete(url); }); } } catch (Exception e) { FormMain.DefaultInstance.Invoke((MethodInvoker) delegate { FormMain.DefaultInstance.UploadFailed(); }); } finally { //GC.Collect(); } } }, null); }
public static void Upload(Stream stream) { S3Service service = GetService(); string objectName = Program.Config.ObjectPrefix + DateTime.Now.Ticks / TimeSpan.TicksPerSecond + "." + Program.Config.ImageType.ToLower(); long len = stream.Position; stream.Seek(0, SeekOrigin.Begin); AddObjectRequest req = new AddObjectRequest(service, Program.Config.BucketName, objectName) { CannedAcl = CannedAcl.PublicRead, ContentType = "image/" + Program.Config.ImageType, ContentLength = len }; IAsyncResult uploadAsync = req.BeginGetRequestStream(a => { using (Stream outStream = req.EndGetRequestStream(a)) { try { var buffer = new byte[len > 65536 ? 65536 : len]; var position = 0; while (position < stream.Length) { var read = stream.Read(buffer, 0, buffer.Length); outStream.Write(buffer, 0, read); position += read; } outStream.Flush(); stream.Close(); stream.Dispose(); stream = null; buffer = null; using (AddObjectResponse response = req.GetResponse()) { string url = null; if (Program.Config.CloudFront != null && Program.Config.CloudFront.Length > 0) { url = "http://" + Program.Config.CloudFront + "/" + objectName; } else { url = "http://" + Program.Config.Region + "/" + Program.Config.BucketName + "/" + objectName; } FormMain.DefaultInstance.Invoke((MethodInvoker)delegate { FormMain.DefaultInstance.UploadComplete(url); }); } } catch (Exception e) { FormMain.DefaultInstance.Invoke((MethodInvoker)delegate { FormMain.DefaultInstance.UploadFailed(); }); } finally { //GC.Collect(); } } }, null); }