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 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;

View file

@ -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;
}
}

View file

@ -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;
}
}

View file

@ -588,6 +588,9 @@ public void LoadSettings()
cbAmazonS3StorageClass.Items.AddRange(Helpers.GetLocalizedEnumDescriptions<AmazonS3StorageClass>());
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