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