diff --git a/ShareX.UploadersLib/FileUploaders/AzureStorage.cs b/ShareX.UploadersLib/FileUploaders/AzureStorage.cs
index 6824e0bab..3f8f07cba 100644
--- a/ShareX.UploadersLib/FileUploaders/AzureStorage.cs
+++ b/ShareX.UploadersLib/FileUploaders/AzureStorage.cs
@@ -51,7 +51,7 @@ public override bool CheckConfig(UploadersConfig config)
public override GenericUploader CreateUploader(UploadersConfig config, TaskReferenceHelper taskInfo)
{
- return new AzureStorage(config.AzureStorageAccountName, config.AzureStorageAccountAccessKey, config.AzureStorageContainer);
+ return new AzureStorage(config.AzureStorageAccountName, config.AzureStorageAccountAccessKey, config.AzureStorageContainer, config.AzureStorageEnvironment);
}
public override TabPage GetUploadersConfigTabPage(UploadersConfigForm form) => form.tpAzureStorage;
@@ -64,12 +64,14 @@ public sealed class AzureStorage : FileUploader
public string AzureStorageAccountName { get; private set; }
public string AzureStorageAccountAccessKey { get; private set; }
public string AzureStorageContainer { get; private set; }
+ public string AzureStorageEnvironment { get; private set; }
- public AzureStorage(string azureStorageAccountName, string azureStorageAccessKey, string azureStorageContainer)
+ public AzureStorage(string azureStorageAccountName, string azureStorageAccessKey, string azureStorageContainer, string azureStorageEnvironment)
{
AzureStorageAccountName = azureStorageAccountName;
AzureStorageAccountAccessKey = azureStorageAccessKey;
AzureStorageContainer = azureStorageContainer;
+ AzureStorageEnvironment = (!string.IsNullOrEmpty(azureStorageEnvironment)) ? azureStorageEnvironment : "blob.core.windows.net";
}
public override UploadResult Upload(Stream stream, string fileName)
@@ -86,7 +88,7 @@ public override UploadResult Upload(Stream stream, string fileName)
CreateContainerIfNotExists();
string date = DateTime.UtcNow.ToString("R", CultureInfo.InvariantCulture);
- string url = $"https://{AzureStorageAccountName}.blob.core.windows.net/{AzureStorageContainer}/{fileName}";
+ string url = $"https://{AzureStorageAccountName}.{AzureStorageEnvironment}/{AzureStorageContainer}/{fileName}";
string contentType = Helpers.GetMimeType(fileName);
NameValueCollection requestHeaders = new NameValueCollection();
@@ -116,7 +118,7 @@ public override UploadResult Upload(Stream stream, string fileName)
private void CreateContainerIfNotExists()
{
string date = DateTime.UtcNow.ToString("R", CultureInfo.InvariantCulture);
- string url = $"https://{AzureStorageAccountName}.blob.core.windows.net/{AzureStorageContainer}?restype=container";
+ string url = $"https://{AzureStorageAccountName}.{AzureStorageEnvironment}/{AzureStorageContainer}?restype=container";
NameValueCollection requestHeaders = new NameValueCollection();
requestHeaders["Content-Length"] = "0";
@@ -154,7 +156,7 @@ private void CreateContainerIfNotExists()
private void SetContainerACL()
{
string date = DateTime.UtcNow.ToString("R", CultureInfo.InvariantCulture);
- string url = $"https://{AzureStorageAccountName}.blob.core.windows.net/{AzureStorageContainer}?restype=container&comp=acl";
+ string url = $"https://{AzureStorageAccountName}.{AzureStorageEnvironment}/{AzureStorageContainer}?restype=container&comp=acl";
NameValueCollection requestHeaders = new NameValueCollection();
requestHeaders["Content-Length"] = "0";
diff --git a/ShareX.UploadersLib/Forms/UploadersConfigForm.Designer.cs b/ShareX.UploadersLib/Forms/UploadersConfigForm.Designer.cs
index b0f76dfc8..0d4c5c842 100644
--- a/ShareX.UploadersLib/Forms/UploadersConfigForm.Designer.cs
+++ b/ShareX.UploadersLib/Forms/UploadersConfigForm.Designer.cs
@@ -648,6 +648,8 @@ private void InitializeComponent()
this.lblWidthHint = new System.Windows.Forms.Label();
this.ttlvMain = new ShareX.HelpersLib.TabToListView();
this.actRapidShareAccountType = new ShareX.UploadersLib.AccountTypeControl();
+ this.lblAzureStorageEnvironment = new System.Windows.Forms.Label();
+ this.cbAzureStorageEnvironment = new System.Windows.Forms.ComboBox();
this.tpOtherUploaders.SuspendLayout();
this.tcOtherUploaders.SuspendLayout();
this.tpTwitter.SuspendLayout();
@@ -2683,6 +2685,8 @@ private void InitializeComponent()
//
// tpAzureStorage
//
+ this.tpAzureStorage.Controls.Add(this.cbAzureStorageEnvironment);
+ this.tpAzureStorage.Controls.Add(this.lblAzureStorageEnvironment);
this.tpAzureStorage.Controls.Add(this.btnAzureStoragePortal);
this.tpAzureStorage.Controls.Add(this.txtAzureStorageContainer);
this.tpAzureStorage.Controls.Add(this.lblAzureStorageContainer);
@@ -5262,6 +5266,23 @@ private void InitializeComponent()
this.actRapidShareAccountType.Name = "actRapidShareAccountType";
this.actRapidShareAccountType.SelectedAccountType = ShareX.UploadersLib.AccountType.Anonymous;
//
+ // lblAzureStorageEnvironment
+ //
+ resources.ApplyResources(this.lblAzureStorageEnvironment, "lblAzureStorageEnvironment");
+ this.lblAzureStorageEnvironment.Name = "lblAzureStorageEnvironment";
+ //
+ // cbAzureStorageEnvironment
+ //
+ this.cbAzureStorageEnvironment.FormattingEnabled = true;
+ this.cbAzureStorageEnvironment.Items.AddRange(new object[] {
+ resources.GetString("cbAzureStorageEnvironment.Items"),
+ resources.GetString("cbAzureStorageEnvironment.Items1"),
+ resources.GetString("cbAzureStorageEnvironment.Items2"),
+ resources.GetString("cbAzureStorageEnvironment.Items3")});
+ resources.ApplyResources(this.cbAzureStorageEnvironment, "cbAzureStorageEnvironment");
+ this.cbAzureStorageEnvironment.Name = "cbAzureStorageEnvironment";
+ this.cbAzureStorageEnvironment.SelectedIndexChanged += new System.EventHandler(this.cbAzureStorageEnvironment_SelectedIndexChanged);
+ //
// UploadersConfigForm
//
resources.ApplyResources(this, "$this");
@@ -6064,5 +6085,7 @@ private void InitializeComponent()
private System.Windows.Forms.TextBox txtSFTPKeyPassphrase;
private System.Windows.Forms.Button btnSFTPKeyLocationBrowse;
private System.Windows.Forms.Label lblSFTPKeyPassphrase;
+ private System.Windows.Forms.ComboBox cbAzureStorageEnvironment;
+ private System.Windows.Forms.Label lblAzureStorageEnvironment;
}
}
diff --git a/ShareX.UploadersLib/Forms/UploadersConfigForm.cs b/ShareX.UploadersLib/Forms/UploadersConfigForm.cs
index b77eb29af..0f7ca2ee6 100644
--- a/ShareX.UploadersLib/Forms/UploadersConfigForm.cs
+++ b/ShareX.UploadersLib/Forms/UploadersConfigForm.cs
@@ -598,6 +598,7 @@ public void LoadSettings()
txtAzureStorageAccountName.Text = Config.AzureStorageAccountName;
txtAzureStorageAccessKey.Text = Config.AzureStorageAccountAccessKey;
txtAzureStorageContainer.Text = Config.AzureStorageContainer;
+ cbAzureStorageEnvironment.Text = Config.AzureStorageEnvironment;
// Plik
@@ -2907,6 +2908,11 @@ private void txtAzureStorageContainer_TextChanged(object sender, EventArgs e)
Config.AzureStorageContainer = txtAzureStorageContainer.Text;
}
+ private void cbAzureStorageEnvironment_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ Config.AzureStorageEnvironment = cbAzureStorageEnvironment.Text;
+ }
+
private void btnAzureStoragePortal_Click(object sender, EventArgs e)
{
URLHelpers.OpenURL("https://portal.azure.com/?feature.customportal=false#blade/HubsExtension/Resources/resourceType/Microsoft.Storage%2FStorageAccounts");
diff --git a/ShareX.UploadersLib/Forms/UploadersConfigForm.resx b/ShareX.UploadersLib/Forms/UploadersConfigForm.resx
index cbae3a379..594bb4d0f 100644
--- a/ShareX.UploadersLib/Forms/UploadersConfigForm.resx
+++ b/ShareX.UploadersLib/Forms/UploadersConfigForm.resx
@@ -6638,6 +6638,69 @@ store.book[0].title
6
+
+
+ blob.core.windows.net
+
+
+ blob.core.usgovcloudapi.net
+
+
+ blob.core.chinacloudapi.cn
+
+
+ blob.core.cloudapi.de
+
+
+ 16, 173
+
+
+ 526, 21
+
+
+ 8
+
+
+ cbAzureStorageEnvironment
+
+
+ System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ tpAzureStorage
+
+
+ 0
+
+
+ True
+
+
+ NoControl
+
+
+ 13, 156
+
+
+ 69, 13
+
+
+ 7
+
+
+ Environment:
+
+
+ lblAzureStorageEnvironment
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ tpAzureStorage
+
+
+ 1
NoControl
diff --git a/ShareX.UploadersLib/UploadersConfig.cs b/ShareX.UploadersLib/UploadersConfig.cs
index c53e352e8..5b138d80a 100644
--- a/ShareX.UploadersLib/UploadersConfig.cs
+++ b/ShareX.UploadersLib/UploadersConfig.cs
@@ -311,6 +311,7 @@ public class UploadersConfig : SettingsBase
public string AzureStorageAccountName = "";
public string AzureStorageAccountAccessKey = "";
public string AzureStorageContainer = "";
+ public string AzureStorageEnvironment = "blob.core.windows.net";
// Plik