diff --git a/ShareX.UploadersLib/FileUploaders/AzureStorage.cs b/ShareX.UploadersLib/FileUploaders/AzureStorage.cs index f5304c2af..c276f5f77 100644 --- a/ShareX.UploadersLib/FileUploaders/AzureStorage.cs +++ b/ShareX.UploadersLib/FileUploaders/AzureStorage.cs @@ -52,7 +52,7 @@ public override bool CheckConfig(UploadersConfig config) public override GenericUploader CreateUploader(UploadersConfig config, TaskReferenceHelper taskInfo) { return new AzureStorage(config.AzureStorageAccountName, config.AzureStorageAccountAccessKey, config.AzureStorageContainer, - config.AzureStorageEnvironment, config.AzureStorageCustomDomain, config.AzureStorageUploadPath); + config.AzureStorageEnvironment, config.AzureStorageCustomDomain, config.AzureStorageUploadPath, config.AzureStorageCacheControl); } public override TabPage GetUploadersConfigTabPage(UploadersConfigForm form) => form.tpAzureStorage; @@ -68,9 +68,10 @@ public sealed class AzureStorage : FileUploader public string AzureStorageEnvironment { get; private set; } public string AzureStorageCustomDomain { get; private set; } public string AzureStorageUploadPath { get; private set; } + public string AzureStorageCacheControl { get; private set; } public AzureStorage(string azureStorageAccountName, string azureStorageAccessKey, string azureStorageContainer, string azureStorageEnvironment, - string customDomain, string uploadPath) + string customDomain, string uploadPath, string cacheControl) { AzureStorageAccountName = azureStorageAccountName; AzureStorageAccountAccessKey = azureStorageAccessKey; @@ -78,6 +79,7 @@ public sealed class AzureStorage : FileUploader AzureStorageEnvironment = (!string.IsNullOrEmpty(azureStorageEnvironment)) ? azureStorageEnvironment : "blob.core.windows.net"; AzureStorageCustomDomain = customDomain; AzureStorageUploadPath = uploadPath; + AzureStorageCacheControl = cacheControl; } public override UploadResult Upload(Stream stream, string fileName) @@ -104,8 +106,9 @@ public override UploadResult Upload(Stream stream, string fileName) requestHeaders["x-ms-date"] = date; requestHeaders["x-ms-version"] = APIVersion; requestHeaders["x-ms-blob-type"] = "BlockBlob"; + if (!String.IsNullOrEmpty(AzureStorageCacheControl)) requestHeaders["x-ms-blob-cache-control"] = AzureStorageCacheControl; - string canonicalizedHeaders = $"x-ms-blob-type:BlockBlob\nx-ms-date:{date}\nx-ms-version:{APIVersion}\n"; + string canonicalizedHeaders = $"{((!String.IsNullOrEmpty(AzureStorageCacheControl)) ? $"x-ms-blob-cache-control:{AzureStorageCacheControl}\n" : "")}x-ms-blob-type:BlockBlob\nx-ms-date:{date}\nx-ms-version:{APIVersion}\n"; string canonicalizedResource = $"/{AzureStorageAccountName}/{AzureStorageContainer}/{uploadPath}"; string stringToSign = GenerateStringToSign(canonicalizedHeaders, canonicalizedResource, stream.Length.ToString(), contentType); diff --git a/ShareX.UploadersLib/Forms/UploadersConfigForm.Designer.cs b/ShareX.UploadersLib/Forms/UploadersConfigForm.Designer.cs index 8432658a9..3bd463fa9 100644 --- a/ShareX.UploadersLib/Forms/UploadersConfigForm.Designer.cs +++ b/ShareX.UploadersLib/Forms/UploadersConfigForm.Designer.cs @@ -274,6 +274,8 @@ private void InitializeComponent() this.lblGoogleCloudStorageBucket = new System.Windows.Forms.Label(); this.txtGoogleCloudStorageBucket = new System.Windows.Forms.TextBox(); this.tpAzureStorage = new System.Windows.Forms.TabPage(); + this.txtAzureStorageCacheControl = new System.Windows.Forms.TextBox(); + this.lblAzureStorageCacheControl = new System.Windows.Forms.Label(); this.lblAzureStorageURLPreview = new System.Windows.Forms.Label(); this.lblAzureStorageURLPreviewLabel = new System.Windows.Forms.Label(); this.txtAzureStorageUploadPath = new System.Windows.Forms.TextBox(); @@ -2334,6 +2336,8 @@ private void InitializeComponent() // tpAzureStorage // this.tpAzureStorage.BackColor = System.Drawing.SystemColors.Window; + this.tpAzureStorage.Controls.Add(this.txtAzureStorageCacheControl); + this.tpAzureStorage.Controls.Add(this.lblAzureStorageCacheControl); this.tpAzureStorage.Controls.Add(this.lblAzureStorageURLPreview); this.tpAzureStorage.Controls.Add(this.lblAzureStorageURLPreviewLabel); this.tpAzureStorage.Controls.Add(this.txtAzureStorageUploadPath); @@ -2352,6 +2356,17 @@ private void InitializeComponent() resources.ApplyResources(this.tpAzureStorage, "tpAzureStorage"); this.tpAzureStorage.Name = "tpAzureStorage"; // + // txtAzureStorageCacheControl + // + resources.ApplyResources(this.txtAzureStorageCacheControl, "txtAzureStorageCacheControl"); + this.txtAzureStorageCacheControl.Name = "txtAzureStorageCacheControl"; + this.txtAzureStorageCacheControl.TextChanged += new System.EventHandler(this.txtAzureStorageCacheControl_TextChanged); + // + // lblAzureStorageCacheControl + // + resources.ApplyResources(this.lblAzureStorageCacheControl, "lblAzureStorageCacheControl"); + this.lblAzureStorageCacheControl.Name = "lblAzureStorageCacheControl"; + // // lblAzureStorageURLPreview // resources.ApplyResources(this.lblAzureStorageURLPreview, "lblAzureStorageURLPreview"); @@ -5688,5 +5703,7 @@ private void InitializeComponent() private OAuthLoopbackControl oauth2GooglePhotos; private OAuthLoopbackControl oauth2GoogleDrive; private OAuthLoopbackControl oauth2GoogleCloudStorage; + private System.Windows.Forms.TextBox txtAzureStorageCacheControl; + private System.Windows.Forms.Label lblAzureStorageCacheControl; } } \ No newline at end of file diff --git a/ShareX.UploadersLib/Forms/UploadersConfigForm.cs b/ShareX.UploadersLib/Forms/UploadersConfigForm.cs index 664f6a50c..5a135b4bb 100644 --- a/ShareX.UploadersLib/Forms/UploadersConfigForm.cs +++ b/ShareX.UploadersLib/Forms/UploadersConfigForm.cs @@ -670,6 +670,7 @@ private void LoadFileUploaderSettings() cbAzureStorageEnvironment.Text = Config.AzureStorageEnvironment; txtAzureStorageCustomDomain.Text = Config.AzureStorageCustomDomain; txtAzureStorageUploadPath.Text = Config.AzureStorageUploadPath; + txtAzureStorageCacheControl.Text = Config.AzureStorageCacheControl; UpdateAzureStorageStatus(); #endregion Azure Storage @@ -2861,6 +2862,12 @@ private void txtAzureStorageCustomDomain_TextChanged(object sender, EventArgs e) UpdateAzureStorageStatus(); } + private void txtAzureStorageCacheControl_TextChanged(object sender, EventArgs e) + { + Config.AzureStorageCacheControl = txtAzureStorageCacheControl.Text; + UpdateAzureStorageStatus(); + } + #endregion Azure Storage #region Backblaze B2 diff --git a/ShareX.UploadersLib/Forms/UploadersConfigForm.resx b/ShareX.UploadersLib/Forms/UploadersConfigForm.resx index cee4ba572..f605a21f1 100644 --- a/ShareX.UploadersLib/Forms/UploadersConfigForm.resx +++ b/ShareX.UploadersLib/Forms/UploadersConfigForm.resx @@ -5747,6 +5747,57 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt 7 + + 16, 326 + + + 526, 20 + + + 16 + + + txtAzureStorageCacheControl + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tpAzureStorage + + + 0 + + + True + + + NoControl + + + 13, 310 + + + 113, 13 + + + 15 + + + Cache-Control header: + + + lblAzureStorageCacheControl + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tpAzureStorage + + + 1 + True @@ -5754,7 +5805,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt NoControl - 13, 323 + 10, 387 45, 13 @@ -5775,7 +5826,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt tpAzureStorage - 0 + 2 True @@ -5784,7 +5835,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt NoControl - 13, 304 + 10, 368 72, 13 @@ -5805,7 +5856,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt tpAzureStorage - 1 + 3 16, 223 @@ -5826,7 +5877,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt tpAzureStorage - 2 + 4 True @@ -5856,7 +5907,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt tpAzureStorage - 3 + 5 blob.core.windows.net @@ -5889,7 +5940,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt tpAzureStorage - 4 + 6 True @@ -5919,7 +5970,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt tpAzureStorage - 5 + 7 NoControl @@ -5946,7 +5997,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt tpAzureStorage - 6 + 8 16, 128 @@ -5967,7 +6018,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt tpAzureStorage - 7 + 9 True @@ -5997,7 +6048,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt tpAzureStorage - 8 + 10 16, 80 @@ -6018,7 +6069,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt tpAzureStorage - 9 + 11 True @@ -6051,7 +6102,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt tpAzureStorage - 10 + 12 16, 32 @@ -6072,7 +6123,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt tpAzureStorage - 11 + 13 True @@ -6105,7 +6156,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt tpAzureStorage - 12 + 14 16, 273 @@ -6126,7 +6177,7 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt tpAzureStorage - 13 + 15 True @@ -6156,16 +6207,16 @@ For example, if your bucket is called "bucket.example.com" then URL will be "htt tpAzureStorage - 14 + 16 - 4, 220 + 4, 58 3, 3, 3, 3 - 178, 0 + 803, 507 28 diff --git a/ShareX.UploadersLib/Forms/UploadersConfigFormHelper.cs b/ShareX.UploadersLib/Forms/UploadersConfigFormHelper.cs index 725b59219..8d15db9ef 100644 --- a/ShareX.UploadersLib/Forms/UploadersConfigFormHelper.cs +++ b/ShareX.UploadersLib/Forms/UploadersConfigFormHelper.cs @@ -282,7 +282,7 @@ private void UpdateGoogleCloudStorageStatus() private void UpdateAzureStorageStatus() { AzureStorage azure = new AzureStorage(Config.AzureStorageAccountName, Config.AzureStorageAccountAccessKey, Config.AzureStorageContainer, - Config.AzureStorageEnvironment, Config.AzureStorageCustomDomain, Config.AzureStorageUploadPath); + Config.AzureStorageEnvironment, Config.AzureStorageCustomDomain, Config.AzureStorageUploadPath, Config.AzureStorageCacheControl); lblAzureStorageURLPreview.Text = azure.GetPreviewURL(); } diff --git a/ShareX.UploadersLib/UploadersConfig.cs b/ShareX.UploadersLib/UploadersConfig.cs index 696410291..f93c3ba00 100644 --- a/ShareX.UploadersLib/UploadersConfig.cs +++ b/ShareX.UploadersLib/UploadersConfig.cs @@ -398,6 +398,7 @@ public class UploadersConfig : SettingsBase public string AzureStorageEnvironment { get; set; } = "blob.core.windows.net"; public string AzureStorageCustomDomain { get; set; } = ""; public string AzureStorageUploadPath { get; set; } = ""; + public string AzureStorageCacheControl { get; set; } = ""; #endregion Azure Storage