From 051870383b675735985ad29f15933071ba734dec Mon Sep 17 00:00:00 2001 From: Charles Milette Date: Thu, 1 Feb 2018 14:55:23 -0500 Subject: [PATCH] Add option to remove file extensions on Amazon S3 uploads --- ShareX.UploadersLib/FileUploaders/AmazonS3.cs | 25 ++++++++---- .../FileUploaders/AmazonS3Settings.cs | 3 ++ .../Forms/UploadersConfigForm.Designer.cs | 38 +++++++++++++++++++ .../Forms/UploadersConfigForm.cs | 18 +++++++++ 4 files changed, 76 insertions(+), 8 deletions(-) diff --git a/ShareX.UploadersLib/FileUploaders/AmazonS3.cs b/ShareX.UploadersLib/FileUploaders/AmazonS3.cs index 016ef002a..9d8146339 100644 --- a/ShareX.UploadersLib/FileUploaders/AmazonS3.cs +++ b/ShareX.UploadersLib/FileUploaders/AmazonS3.cs @@ -118,16 +118,25 @@ public override UploadResult Upload(Stream stream, string fileName) string credential = URLHelpers.CombineURL(Settings.AccessKeyID, scope); string timeStamp = DateTime.UtcNow.ToString("yyyyMMddTHHmmssZ", CultureInfo.InvariantCulture); string contentType = Helpers.GetMimeType(fileName); - string uploadPath = GetUploadPath(fileName); string hashedPayload = "UNSIGNED-PAYLOAD"; - NameValueCollection headers = new NameValueCollection(); - headers["Host"] = host; - headers["Content-Length"] = stream.Length.ToString(); - headers["Content-Type"] = contentType; - headers["x-amz-date"] = timeStamp; - headers["x-amz-content-sha256"] = hashedPayload; - headers["x-amz-storage-class"] = Settings.StorageClass.ToString(); + if ((Settings.RemoveExtensionImage && Helpers.IsImageFile(fileName)) || + (Settings.RemoveExtensionText && Helpers.IsTextFile(fileName)) || + (Settings.RemoveExtensionVideo && Helpers.IsVideoFile(fileName))) + { + fileName = Path.GetFileNameWithoutExtension(fileName); + } + string uploadPath = GetUploadPath(fileName); + + NameValueCollection headers = new NameValueCollection + { + ["Host"] = host, + ["Content-Length"] = stream.Length.ToString(), + ["Content-Type"] = contentType, + ["x-amz-date"] = timeStamp, + ["x-amz-content-sha256"] = hashedPayload, + ["x-amz-storage-class"] = Settings.StorageClass.ToString() + }; if (Settings.SetPublicACL) headers["x-amz-acl"] = "public-read"; string canonicalURI = uploadPath; diff --git a/ShareX.UploadersLib/FileUploaders/AmazonS3Settings.cs b/ShareX.UploadersLib/FileUploaders/AmazonS3Settings.cs index 229b16a64..a86337e9d 100644 --- a/ShareX.UploadersLib/FileUploaders/AmazonS3Settings.cs +++ b/ShareX.UploadersLib/FileUploaders/AmazonS3Settings.cs @@ -38,5 +38,8 @@ public class AmazonS3Settings public string CustomDomain { get; set; } public bool SetPublicACL { get; set; } = true; public AmazonS3StorageClass StorageClass { get; set; } + public bool RemoveExtensionImage { get; set; } = false; + public bool RemoveExtensionVideo { get; set; } = false; + public bool RemoveExtensionText { get; set; } = false; } } \ No newline at end of file diff --git a/ShareX.UploadersLib/Forms/UploadersConfigForm.Designer.cs b/ShareX.UploadersLib/Forms/UploadersConfigForm.Designer.cs index cbf97731d..6861054e1 100644 --- a/ShareX.UploadersLib/Forms/UploadersConfigForm.Designer.cs +++ b/ShareX.UploadersLib/Forms/UploadersConfigForm.Designer.cs @@ -625,6 +625,10 @@ private void InitializeComponent() this.lblWidthHint = new System.Windows.Forms.Label(); this.ttlvMain = new ShareX.HelpersLib.TabToListView(); this.actRapidShareAccountType = new ShareX.UploadersLib.AccountTypeControl(); + this.cbAmazonS3StripExtensionImage = new System.Windows.Forms.CheckBox(); + this.cbAmazonS3StripExtensionVideo = new System.Windows.Forms.CheckBox(); + this.cbAmazonS3StripExtensionText = new System.Windows.Forms.CheckBox(); + this.lblAmazonS3StripExtension = new System.Windows.Forms.Label(); this.tpOtherUploaders.SuspendLayout(); this.tcOtherUploaders.SuspendLayout(); this.tpTwitter.SuspendLayout(); @@ -2560,8 +2564,12 @@ private void InitializeComponent() // // gbAmazonS3Advanced // + this.gbAmazonS3Advanced.Controls.Add(this.lblAmazonS3StripExtension); + this.gbAmazonS3Advanced.Controls.Add(this.cbAmazonS3StripExtensionText); this.gbAmazonS3Advanced.Controls.Add(this.cbAmazonS3StorageClass); + this.gbAmazonS3Advanced.Controls.Add(this.cbAmazonS3StripExtensionVideo); this.gbAmazonS3Advanced.Controls.Add(this.cbAmazonS3PublicACL); + this.gbAmazonS3Advanced.Controls.Add(this.cbAmazonS3StripExtensionImage); this.gbAmazonS3Advanced.Controls.Add(this.cbAmazonS3UsePathStyle); this.gbAmazonS3Advanced.Controls.Add(this.btnAmazonS3StorageClassHelp); this.gbAmazonS3Advanced.Controls.Add(this.lblAmazonS3StorageClass); @@ -5092,6 +5100,32 @@ private void InitializeComponent() this.actRapidShareAccountType.Name = "actRapidShareAccountType"; this.actRapidShareAccountType.SelectedAccountType = ShareX.UploadersLib.AccountType.Anonymous; // + // cbAmazonS3StripExtensionImage + // + resources.ApplyResources(this.cbAmazonS3StripExtensionImage, "cbAmazonS3StripExtensionImage"); + this.cbAmazonS3StripExtensionImage.Name = "cbAmazonS3StripExtensionImage"; + this.cbAmazonS3StripExtensionImage.UseVisualStyleBackColor = true; + this.cbAmazonS3StripExtensionImage.CheckedChanged += new System.EventHandler(this.cbAmazonS3StripExtensionImage_CheckedChanged); + // + // cbAmazonS3StripExtensionVideo + // + resources.ApplyResources(this.cbAmazonS3StripExtensionVideo, "cbAmazonS3StripExtensionVideo"); + this.cbAmazonS3StripExtensionVideo.Name = "cbAmazonS3StripExtensionVideo"; + this.cbAmazonS3StripExtensionVideo.UseVisualStyleBackColor = true; + this.cbAmazonS3StripExtensionVideo.CheckedChanged += new System.EventHandler(this.cbAmazonS3StripExtensionVideo_CheckedChanged); + // + // cbAmazonS3StripExtensionText + // + resources.ApplyResources(this.cbAmazonS3StripExtensionText, "cbAmazonS3StripExtensionText"); + this.cbAmazonS3StripExtensionText.Name = "cbAmazonS3StripExtensionText"; + this.cbAmazonS3StripExtensionText.UseVisualStyleBackColor = true; + this.cbAmazonS3StripExtensionText.CheckedChanged += new System.EventHandler(this.cbAmazonS3StripExtensionText_CheckedChanged); + // + // lblAmazonS3StripExtension + // + resources.ApplyResources(this.lblAmazonS3StripExtension, "lblAmazonS3StripExtension"); + this.lblAmazonS3StripExtension.Name = "lblAmazonS3StripExtension"; + // // UploadersConfigForm // resources.ApplyResources(this, "$this"); @@ -5862,5 +5896,9 @@ private void InitializeComponent() private System.Windows.Forms.Label lblLithiioEmail; private System.Windows.Forms.CheckBox cbAmazonS3PublicACL; private System.Windows.Forms.GroupBox gbAmazonS3Advanced; + private System.Windows.Forms.Label lblAmazonS3StripExtension; + private System.Windows.Forms.CheckBox cbAmazonS3StripExtensionText; + private System.Windows.Forms.CheckBox cbAmazonS3StripExtensionVideo; + private System.Windows.Forms.CheckBox cbAmazonS3StripExtensionImage; } } diff --git a/ShareX.UploadersLib/Forms/UploadersConfigForm.cs b/ShareX.UploadersLib/Forms/UploadersConfigForm.cs index 02937cf5c..fde778f46 100644 --- a/ShareX.UploadersLib/Forms/UploadersConfigForm.cs +++ b/ShareX.UploadersLib/Forms/UploadersConfigForm.cs @@ -588,6 +588,9 @@ public void LoadSettings() cbAmazonS3StorageClass.Items.AddRange(Helpers.GetLocalizedEnumDescriptions()); cbAmazonS3StorageClass.SelectedIndex = (int)Config.AmazonS3Settings.StorageClass; cbAmazonS3PublicACL.Checked = Config.AmazonS3Settings.SetPublicACL; + cbAmazonS3StripExtensionImage.Checked = Config.AmazonS3Settings.RemoveExtensionImage; + cbAmazonS3StripExtensionVideo.Checked = Config.AmazonS3Settings.RemoveExtensionVideo; + cbAmazonS3StripExtensionText.Checked = Config.AmazonS3Settings.RemoveExtensionText; UpdateAmazonS3Status(); #endregion @@ -2271,6 +2274,21 @@ private void cbAmazonS3PublicACL_CheckedChanged(object sender, EventArgs e) Config.AmazonS3Settings.SetPublicACL = cbAmazonS3PublicACL.Checked; } + private void cbAmazonS3StripExtensionImage_CheckedChanged(object sender, EventArgs e) + { + Config.AmazonS3Settings.RemoveExtensionImage = cbAmazonS3StripExtensionImage.Checked; + } + + private void cbAmazonS3StripExtensionVideo_CheckedChanged(object sender, EventArgs e) + { + Config.AmazonS3Settings.RemoveExtensionVideo = cbAmazonS3StripExtensionVideo.Checked; + } + + private void cbAmazonS3StripExtensionText_CheckedChanged(object sender, EventArgs e) + { + Config.AmazonS3Settings.RemoveExtensionText = cbAmazonS3StripExtensionText.Checked; + } + #endregion Amazon S3 #region ownCloud / Nextcloud