diff --git a/ShareX.HelpersLib/Helpers/WebHelpers.cs b/ShareX.HelpersLib/Helpers/WebHelpers.cs index 2539af25b..0a68288c9 100644 --- a/ShareX.HelpersLib/Helpers/WebHelpers.cs +++ b/ShareX.HelpersLib/Helpers/WebHelpers.cs @@ -152,6 +152,12 @@ public static async Task GetFileNameFromWebServerAsync(string url) return fileName; } + public static bool IsSuccessStatusCode(HttpStatusCode statusCode) + { + int statusCodeNum = (int)statusCode; + return statusCodeNum >= 200 && statusCodeNum <= 299; + } + public static int GetRandomUnusedPort() { TcpListener listener = new TcpListener(IPAddress.Loopback, 0); diff --git a/ShareX.UploadersLib/Helpers/MimeTypes.cs b/ShareX.HelpersLib/MimeTypes.cs similarity index 97% rename from ShareX.UploadersLib/Helpers/MimeTypes.cs rename to ShareX.HelpersLib/MimeTypes.cs index 8d5aa5438..061bfb18e 100644 --- a/ShareX.UploadersLib/Helpers/MimeTypes.cs +++ b/ShareX.HelpersLib/MimeTypes.cs @@ -23,25 +23,27 @@ You should have received a copy of the GNU General Public License #endregion License Information (GPL v3) +using Microsoft.Win32; using System; using System.Collections.Generic; +using System.IO; -namespace ShareX.UploadersLib +namespace ShareX.HelpersLib { public static class MimeTypes { public static readonly string DefaultMimeType = "application/octet-stream"; - public static string GetMimeType(string ext) + public static string GetMimeTypeFromExtension(string extension) { - if (!string.IsNullOrEmpty(ext)) + if (!string.IsNullOrEmpty(extension)) { - if (ext[0] == '.') + if (extension[0] == '.') { - ext = ext.Substring(1); + extension = extension.Substring(1); } - if (Mappings.TryGetValue(ext, out string mime)) + if (Mappings.TryGetValue(extension, out string mime)) { return mime; } @@ -50,6 +52,33 @@ public static string GetMimeType(string ext) return null; } + public static string GetMimeTypeFromFileName(string fileName) + { + if (!string.IsNullOrEmpty(fileName)) + { + string extension = Path.GetExtension(fileName).ToLowerInvariant(); + + if (!string.IsNullOrEmpty(extension)) + { + string mimeType = GetMimeTypeFromExtension(extension); + + if (!string.IsNullOrEmpty(mimeType)) + { + return mimeType; + } + + mimeType = RegistryHelpers.GetValueString(extension, "Content Type", RegistryHive.ClassesRoot); + + if (!string.IsNullOrEmpty(mimeType)) + { + return mimeType; + } + } + } + + return DefaultMimeType; + } + // http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types private static Dictionary Mappings = new Dictionary(StringComparer.InvariantCultureIgnoreCase) { diff --git a/ShareX.UploadersLib/BaseUploaders/Uploader.cs b/ShareX.UploadersLib/BaseUploaders/Uploader.cs index bbc13fc0a..d1cb4b100 100644 --- a/ShareX.UploadersLib/BaseUploaders/Uploader.cs +++ b/ShareX.UploadersLib/BaseUploaders/Uploader.cs @@ -273,7 +273,7 @@ protected UploadResult SendRequestFileRange(string url, Stream data, string file } contentLength = Math.Min(contentLength, data.Length - contentPosition); - string contentType = RequestHelpers.GetMimeType(fileName); + string contentType = MimeTypes.GetMimeTypeFromFileName(fileName); if (headers == null) { diff --git a/ShareX.UploadersLib/FileUploaders/AmazonS3.cs b/ShareX.UploadersLib/FileUploaders/AmazonS3.cs index 7e298dcf3..95f8a6948 100644 --- a/ShareX.UploadersLib/FileUploaders/AmazonS3.cs +++ b/ShareX.UploadersLib/FileUploaders/AmazonS3.cs @@ -134,7 +134,7 @@ public override UploadResult Upload(Stream stream, string fileName) string scope = URLHelpers.CombineURL(credentialDate, region, "s3", "aws4_request"); string credential = URLHelpers.CombineURL(Settings.AccessKeyID, scope); string timeStamp = DateTime.UtcNow.ToString("yyyyMMddTHHmmssZ", CultureInfo.InvariantCulture); - string contentType = RequestHelpers.GetMimeType(fileName); + string contentType = MimeTypes.GetMimeTypeFromFileName(fileName); string hashedPayload; if (Settings.SignedPayload) diff --git a/ShareX.UploadersLib/FileUploaders/AzureStorage.cs b/ShareX.UploadersLib/FileUploaders/AzureStorage.cs index 45511268b..c84f24e95 100644 --- a/ShareX.UploadersLib/FileUploaders/AzureStorage.cs +++ b/ShareX.UploadersLib/FileUploaders/AzureStorage.cs @@ -100,7 +100,7 @@ public override UploadResult Upload(Stream stream, string fileName) OnEarlyURLCopyRequested(resultURL); - string contentType = RequestHelpers.GetMimeType(fileName); + string contentType = MimeTypes.GetMimeTypeFromFileName(fileName); NameValueCollection requestHeaders = new NameValueCollection(); requestHeaders["x-ms-date"] = date; diff --git a/ShareX.UploadersLib/FileUploaders/BackblazeB2.cs b/ShareX.UploadersLib/FileUploaders/BackblazeB2.cs index cd3600189..cf1b853db 100644 --- a/ShareX.UploadersLib/FileUploaders/BackblazeB2.cs +++ b/ShareX.UploadersLib/FileUploaders/BackblazeB2.cs @@ -418,7 +418,7 @@ private B2UploadResult B2ApiUploadFile(B2UploadUrl b2UploadUrl, string destinati ["X-Bz-Info-b2-content-disposition"] = URLHelpers.URLEncode(contentDisposition.ToString()), }; - string contentType = RequestHelpers.GetMimeType(destinationPath); + string contentType = MimeTypes.GetMimeTypeFromFileName(destinationPath); using (HttpWebResponse res = GetResponse(HttpMethod.POST, b2UploadUrl.uploadUrl, contentType: contentType, headers: headers, data: file, allowNon2xxResponses: true)) @@ -493,7 +493,10 @@ private static bool IsAuthorizedForUpload(B2Authorization auth, string bucketId, /// If the response body cannot be read. private static B2Error ParseB2Error(HttpWebResponse res) { - if (RequestHelpers.IsSuccessStatusCode(res.StatusCode)) return null; + if (WebHelpers.IsSuccessStatusCode(res.StatusCode)) + { + return null; + } try { diff --git a/ShareX.UploadersLib/FileUploaders/CustomFileUploader.cs b/ShareX.UploadersLib/FileUploaders/CustomFileUploader.cs index 2e6dd9c3a..6f935f299 100644 --- a/ShareX.UploadersLib/FileUploaders/CustomFileUploader.cs +++ b/ShareX.UploadersLib/FileUploaders/CustomFileUploader.cs @@ -87,7 +87,7 @@ public override UploadResult Upload(Stream stream, string fileName) } else if (uploader.Body == CustomUploaderBody.Binary) { - result.Response = SendRequest(uploader.RequestMethod, uploader.GetRequestURL(input), stream, RequestHelpers.GetMimeType(fileName), null, + result.Response = SendRequest(uploader.RequestMethod, uploader.GetRequestURL(input), stream, MimeTypes.GetMimeTypeFromFileName(fileName), null, uploader.GetHeaders(input)); } else diff --git a/ShareX.UploadersLib/FileUploaders/OwnCloud.cs b/ShareX.UploadersLib/FileUploaders/OwnCloud.cs index a77505f31..8614cb9b7 100644 --- a/ShareX.UploadersLib/FileUploaders/OwnCloud.cs +++ b/ShareX.UploadersLib/FileUploaders/OwnCloud.cs @@ -114,7 +114,7 @@ public override UploadResult Upload(Stream stream, string fileName) NameValueCollection headers = RequestHelpers.CreateAuthenticationHeader(Username, Password); headers["OCS-APIREQUEST"] = "true"; - string response = SendRequest(HttpMethod.PUT, url, stream, RequestHelpers.GetMimeType(fileName), null, headers); + string response = SendRequest(HttpMethod.PUT, url, stream, MimeTypes.GetMimeTypeFromFileName(fileName), null, headers); UploadResult result = new UploadResult(response); diff --git a/ShareX.UploadersLib/FileUploaders/Plik.cs b/ShareX.UploadersLib/FileUploaders/Plik.cs index 89c33ab7d..e8956bf52 100644 --- a/ShareX.UploadersLib/FileUploaders/Plik.cs +++ b/ShareX.UploadersLib/FileUploaders/Plik.cs @@ -76,7 +76,7 @@ public override UploadResult Upload(Stream stream, string fileName) metaDataReq.Files = new UploadMetadataRequestFile0(); metaDataReq.Files.File0 = new UploadMetadataRequestFile(); metaDataReq.Files.File0.FileName = fileName; - metaDataReq.Files.File0.FileType = RequestHelpers.GetMimeType(fileName); + metaDataReq.Files.File0.FileType = MimeTypes.GetMimeTypeFromFileName(fileName); metaDataReq.Files.File0.FileSize = Convert.ToInt32(stream.Length); metaDataReq.Removable = Settings.Removable; metaDataReq.OneShot = Settings.OneShot; diff --git a/ShareX.UploadersLib/Helpers/RequestHelpers.cs b/ShareX.UploadersLib/Helpers/RequestHelpers.cs index bad893a74..a4c24f99d 100644 --- a/ShareX.UploadersLib/Helpers/RequestHelpers.cs +++ b/ShareX.UploadersLib/Helpers/RequestHelpers.cs @@ -23,7 +23,6 @@ You should have received a copy of the GNU General Public License #endregion License Information (GPL v3) -using Microsoft.Win32; using ShareX.HelpersLib; using System; using System.Collections.Generic; @@ -187,14 +186,14 @@ public static byte[] MakeInputContent(string boundary, Dictionary= 200 && statusCodeNum <= 299; - } } } \ No newline at end of file diff --git a/ShareX.UploadersLib/Helpers/ResponseInfo.cs b/ShareX.UploadersLib/Helpers/ResponseInfo.cs index cbac814c4..2b28fd3ad 100644 --- a/ShareX.UploadersLib/Helpers/ResponseInfo.cs +++ b/ShareX.UploadersLib/Helpers/ResponseInfo.cs @@ -23,6 +23,7 @@ You should have received a copy of the GNU General Public License #endregion License Information (GPL v3) +using ShareX.HelpersLib; using System.Net; using System.Text; @@ -32,7 +33,7 @@ public class ResponseInfo { public HttpStatusCode StatusCode { get; set; } public string StatusDescription { get; set; } - public bool IsSuccess => RequestHelpers.IsSuccessStatusCode(StatusCode); + public bool IsSuccess => WebHelpers.IsSuccessStatusCode(StatusCode); public string ResponseURL { get; set; } public WebHeaderCollection Headers { get; set; } public string ResponseText { get; set; } diff --git a/ShareX.UploadersLib/ImageUploaders/CustomImageUploader.cs b/ShareX.UploadersLib/ImageUploaders/CustomImageUploader.cs index f54f3af25..f0ada7def 100644 --- a/ShareX.UploadersLib/ImageUploaders/CustomImageUploader.cs +++ b/ShareX.UploadersLib/ImageUploaders/CustomImageUploader.cs @@ -83,7 +83,7 @@ public override UploadResult Upload(Stream stream, string fileName) } else if (uploader.Body == CustomUploaderBody.Binary) { - result.Response = SendRequest(uploader.RequestMethod, uploader.GetRequestURL(input), stream, RequestHelpers.GetMimeType(fileName), + result.Response = SendRequest(uploader.RequestMethod, uploader.GetRequestURL(input), stream, MimeTypes.GetMimeTypeFromFileName(fileName), null, uploader.GetHeaders(input)); } else diff --git a/ShareX.UploadersLib/TextUploaders/CustomTextUploader.cs b/ShareX.UploadersLib/TextUploaders/CustomTextUploader.cs index 0e9e2a45e..560a26852 100644 --- a/ShareX.UploadersLib/TextUploaders/CustomTextUploader.cs +++ b/ShareX.UploadersLib/TextUploaders/CustomTextUploader.cs @@ -112,7 +112,7 @@ public override UploadResult UploadText(string text, string fileName) byte[] bytes = Encoding.UTF8.GetBytes(text); using (MemoryStream stream = new MemoryStream(bytes)) { - result.Response = SendRequest(uploader.RequestMethod, uploader.GetRequestURL(input), stream, RequestHelpers.GetMimeType(fileName), + result.Response = SendRequest(uploader.RequestMethod, uploader.GetRequestURL(input), stream, MimeTypes.GetMimeTypeFromFileName(fileName), null, uploader.GetHeaders(input)); } }