Add option to remove file extensions on Amazon S3 uploads

This commit is contained in:
Charles Milette 2018-02-01 14:55:23 -05:00
parent a4849a7c10
commit 051870383b
No known key found for this signature in database
GPG key ID: 9BC74CC51CB137CE
4 changed files with 76 additions and 8 deletions

View file

@ -118,16 +118,25 @@ public override UploadResult Upload(Stream stream, string fileName)
string credential = URLHelpers.CombineURL(Settings.AccessKeyID, scope); string credential = URLHelpers.CombineURL(Settings.AccessKeyID, scope);
string timeStamp = DateTime.UtcNow.ToString("yyyyMMddTHHmmssZ", CultureInfo.InvariantCulture); string timeStamp = DateTime.UtcNow.ToString("yyyyMMddTHHmmssZ", CultureInfo.InvariantCulture);
string contentType = Helpers.GetMimeType(fileName); string contentType = Helpers.GetMimeType(fileName);
string uploadPath = GetUploadPath(fileName);
string hashedPayload = "UNSIGNED-PAYLOAD"; string hashedPayload = "UNSIGNED-PAYLOAD";
NameValueCollection headers = new NameValueCollection(); if ((Settings.RemoveExtensionImage && Helpers.IsImageFile(fileName)) ||
headers["Host"] = host; (Settings.RemoveExtensionText && Helpers.IsTextFile(fileName)) ||
headers["Content-Length"] = stream.Length.ToString(); (Settings.RemoveExtensionVideo && Helpers.IsVideoFile(fileName)))
headers["Content-Type"] = contentType; {
headers["x-amz-date"] = timeStamp; fileName = Path.GetFileNameWithoutExtension(fileName);
headers["x-amz-content-sha256"] = hashedPayload; }
headers["x-amz-storage-class"] = Settings.StorageClass.ToString(); 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"; if (Settings.SetPublicACL) headers["x-amz-acl"] = "public-read";
string canonicalURI = uploadPath; string canonicalURI = uploadPath;

View file

@ -38,5 +38,8 @@ public class AmazonS3Settings
public string CustomDomain { get; set; } public string CustomDomain { get; set; }
public bool SetPublicACL { get; set; } = true; public bool SetPublicACL { get; set; } = true;
public AmazonS3StorageClass StorageClass { get; set; } public AmazonS3StorageClass StorageClass { get; set; }
public bool RemoveExtensionImage { get; set; } = false;
public bool RemoveExtensionVideo { get; set; } = false;
public bool RemoveExtensionText { get; set; } = false;
} }
} }

View file

@ -625,6 +625,10 @@ private void InitializeComponent()
this.lblWidthHint = new System.Windows.Forms.Label(); this.lblWidthHint = new System.Windows.Forms.Label();
this.ttlvMain = new ShareX.HelpersLib.TabToListView(); this.ttlvMain = new ShareX.HelpersLib.TabToListView();
this.actRapidShareAccountType = new ShareX.UploadersLib.AccountTypeControl(); 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.tpOtherUploaders.SuspendLayout();
this.tcOtherUploaders.SuspendLayout(); this.tcOtherUploaders.SuspendLayout();
this.tpTwitter.SuspendLayout(); this.tpTwitter.SuspendLayout();
@ -2560,8 +2564,12 @@ private void InitializeComponent()
// //
// gbAmazonS3Advanced // gbAmazonS3Advanced
// //
this.gbAmazonS3Advanced.Controls.Add(this.lblAmazonS3StripExtension);
this.gbAmazonS3Advanced.Controls.Add(this.cbAmazonS3StripExtensionText);
this.gbAmazonS3Advanced.Controls.Add(this.cbAmazonS3StorageClass); this.gbAmazonS3Advanced.Controls.Add(this.cbAmazonS3StorageClass);
this.gbAmazonS3Advanced.Controls.Add(this.cbAmazonS3StripExtensionVideo);
this.gbAmazonS3Advanced.Controls.Add(this.cbAmazonS3PublicACL); this.gbAmazonS3Advanced.Controls.Add(this.cbAmazonS3PublicACL);
this.gbAmazonS3Advanced.Controls.Add(this.cbAmazonS3StripExtensionImage);
this.gbAmazonS3Advanced.Controls.Add(this.cbAmazonS3UsePathStyle); this.gbAmazonS3Advanced.Controls.Add(this.cbAmazonS3UsePathStyle);
this.gbAmazonS3Advanced.Controls.Add(this.btnAmazonS3StorageClassHelp); this.gbAmazonS3Advanced.Controls.Add(this.btnAmazonS3StorageClassHelp);
this.gbAmazonS3Advanced.Controls.Add(this.lblAmazonS3StorageClass); this.gbAmazonS3Advanced.Controls.Add(this.lblAmazonS3StorageClass);
@ -5092,6 +5100,32 @@ private void InitializeComponent()
this.actRapidShareAccountType.Name = "actRapidShareAccountType"; this.actRapidShareAccountType.Name = "actRapidShareAccountType";
this.actRapidShareAccountType.SelectedAccountType = ShareX.UploadersLib.AccountType.Anonymous; 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 // UploadersConfigForm
// //
resources.ApplyResources(this, "$this"); resources.ApplyResources(this, "$this");
@ -5862,5 +5896,9 @@ private void InitializeComponent()
private System.Windows.Forms.Label lblLithiioEmail; private System.Windows.Forms.Label lblLithiioEmail;
private System.Windows.Forms.CheckBox cbAmazonS3PublicACL; private System.Windows.Forms.CheckBox cbAmazonS3PublicACL;
private System.Windows.Forms.GroupBox gbAmazonS3Advanced; 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;
} }
} }

View file

@ -588,6 +588,9 @@ public void LoadSettings()
cbAmazonS3StorageClass.Items.AddRange(Helpers.GetLocalizedEnumDescriptions<AmazonS3StorageClass>()); cbAmazonS3StorageClass.Items.AddRange(Helpers.GetLocalizedEnumDescriptions<AmazonS3StorageClass>());
cbAmazonS3StorageClass.SelectedIndex = (int)Config.AmazonS3Settings.StorageClass; cbAmazonS3StorageClass.SelectedIndex = (int)Config.AmazonS3Settings.StorageClass;
cbAmazonS3PublicACL.Checked = Config.AmazonS3Settings.SetPublicACL; cbAmazonS3PublicACL.Checked = Config.AmazonS3Settings.SetPublicACL;
cbAmazonS3StripExtensionImage.Checked = Config.AmazonS3Settings.RemoveExtensionImage;
cbAmazonS3StripExtensionVideo.Checked = Config.AmazonS3Settings.RemoveExtensionVideo;
cbAmazonS3StripExtensionText.Checked = Config.AmazonS3Settings.RemoveExtensionText;
UpdateAmazonS3Status(); UpdateAmazonS3Status();
#endregion #endregion
@ -2271,6 +2274,21 @@ private void cbAmazonS3PublicACL_CheckedChanged(object sender, EventArgs e)
Config.AmazonS3Settings.SetPublicACL = cbAmazonS3PublicACL.Checked; 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 #endregion Amazon S3
#region ownCloud / Nextcloud #region ownCloud / Nextcloud