Tooark.Utils
4.0.1
See the version list below for details.
dotnet add package Tooark.Utils --version 4.0.1
NuGet\Install-Package Tooark.Utils -Version 4.0.1
<PackageReference Include="Tooark.Utils" Version="4.0.1" />
<PackageVersion Include="Tooark.Utils" Version="4.0.1" />
<PackageReference Include="Tooark.Utils" />
paket add Tooark.Utils --version 4.0.1
#r "nuget: Tooark.Utils, 4.0.1"
#:package Tooark.Utils@4.0.1
#addin nuget:?package=Tooark.Utils&version=4.0.1
#tool nuget:?package=Tooark.Utils&version=4.0.1
Tooark.Utils
Biblioteca de funções utilitárias gerais que auxiliam no desenvolvimento, incluindo métodos para manipulação de strings, arquivos, idiomas e listas localizadas.
Instalação
dotnet add package Tooark.Utils
Conteúdo
Utilitários
Os utilitários disponíveis são:
1. Conversão de Arquivos e Extração de Extensões
Funcionalidade: Conversão de arquivos e extração de extensões.
Métodos:
ToMemoryStream(string? stringFile, long maxBytes = 0): Converte uma string base64 paraMemoryStream.ToMemoryStream(IFormFile? fromFile, long maxBytes = 0): Converte umIFormFileparaMemoryStream.ToMemoryStreamAsync(IFormFile? fromFile, long maxBytes = 0, CancellationToken cancellationToken = default): Converte umIFormFileparaMemoryStreamde forma assíncrona.Extension(string? stringFile): Extrai a extensão do arquivo de uma string base64.Extension(IFormFile? fromFile): Extrai a extensão do arquivo de umIFormFile.
Constante:
DefaultMaxBytes: Tamanho máximo padrão do conteúdo convertido. 5242880 bytes (5MB).
A chave da mensagem de erro do limite está em UtilErrorMessages.
Comportamento:
- A conversão de um
IFormFilecopia o conteúdo binário do arquivo. OMemoryStreamretornado já vem posicionado no início. - A conversão retorna
nullquando o arquivo é nulo ou vazio, e quando a string não contém um base64 válido. - Limite de tamanho: acima de
maxBytesé lançada umaPayloadTooLargeException(HTTP 413), com a mensagemFile.SizeExceeded;{limite}. Valor não positivo aplicaDefaultMaxBytes; o teto absoluto éint.MaxValue, que é o que umMemoryStreamcomporta. O limite é conferido antes de reservar memória, e também bloco a bloco durante a leitura do upload, para valer mesmo quando o tamanho declarado não corresponde ao conteúdo real. - A string precisa trazer o marcador
;base64,, e o conteúdo é lido logo depois dele. Umbase64,solto em outra posição não é aceito. - A extensão extraída de uma string base64 vem do tipo declarado no formato
data:tipo/extensao;base64,conteudo, e o tipo pode trazer parâmetros (data:image/png;charset=utf-8;base64,...). - A extensão é validada: só passam letras e dígitos ASCII, com no máximo dez caracteres. Qualquer outra coisa resulta em
null. Como a extensão vem do que o cliente declarou — o nome do arquivo ou o tipo da data URL — sem essa validação o retorno poderia carregar separador de diretório, marcação ou texto de tamanho arbitrário para dentro de quem a consome. Tipos MIME que não têm forma de extensão, comoimage/svg+xmleapplication/vnd.ms-excel, resultam emnull. - A extensão é sempre retornada em maiúsculas e sem o ponto inicial. Ela reflete o que foi declarado, e não o conteúdo real do arquivo.
2. Validação de Arquivos
Funcionalidade: Verificação da validade de arquivos.
Métodos:
IsImage(IFormFile? file, long fileSize = 0): Verifica se o arquivo é uma imagem válida.IsDocument(IFormFile? file, long fileSize = 0): Verifica se o arquivo é um documento válido.IsVideo(IFormFile? file, long fileSize = 0): Verifica se o arquivo é um vídeo válido.IsCustom(IFormFile? file, long fileSize = 0, string[]? permittedExtensions = null): Verifica se o arquivo é válido para extensões personalizadas.
Comportamento:
- A verificação considera o tamanho e a extensão declarada no nome do arquivo. Ela não inspeciona o conteúdo, portanto não substitui a checagem do tipo real do arquivo quando o conteúdo enviado não é confiável.
- O tamanho padrão é 5242880 bytes (5MB), aplicado quando
fileSizeé zero ou negativo. - As extensões personalizadas são comparadas sem diferenciar maiúsculas de minúsculas e podem ser informadas com ou sem o ponto inicial:
"pdf"e".PDF"têm o mesmo efeito. - Se
permittedExtensionsfor nulo, vazio ou contiver apenas entradas em branco, todas as extensões de imagem, documento e vídeo são aceitas.
3. Geração de Strings
Funcionalidade: Geração de strings segundo critérios específicos e aleatórios.
Métodos:
Sequential(int number): Converte um número inteiro em uma representação equivalente alfabética do número.Password(int len = 12, bool upper = true, bool lower = true, bool number = true, bool special = true, bool similarity = false): Gera uma string com critérios específicos.Hexadecimal(int sizeToken = 128): Gera uma string hexadecimal aleatória.GuidCode(): Gera uma string Guid sem hífens, com 32 caracteres.Token(int length = 256): Gera uma string de token.
Comportamento:
Sequentialretorna letras maiúsculas, e uma string vazia quando o número não é positivo.Passwordusa um gerador criptográfico e garante ao menos um caractere de cada tipo ativado. Comprimentos menores que 8 são elevados para 8, e se todos os tipos forem desativados, todos são reativados.Hexadecimalretorna exatamente o tamanho solicitado, inclusive para tamanhos ímpares. Valores menores que 2 são elevados para 2.
4. Busca de Informações
Funcionalidade:
Obtenção de informações localizadas de uma lista de objetos. O tipo da lista precisa ter a propriedade LanguageCode e a propriedade buscada.
Métodos:
Name<T>(IList<T>? list, string? languageCode = null): Obtém o nome localizado de uma lista de objetos.Title<T>(IList<T>? list, string? languageCode = null): Obtém o título localizado de uma lista de objetos.Description<T>(IList<T>? list, string? languageCode = null): Obtém a descrição localizada de uma lista de objetos.Keywords<T>(IList<T>? list, string? languageCode = null): Obtém as palavras-chave localizadas de uma lista de objetos.Custom<T>(IList<T>? list, string property, string? languageCode = null): Obtém um valor localizado de uma propriedade em uma lista de objetos.
Comportamento:
- Quando
languageCodenão é informado, o idioma atual é usado. - A busca tenta o idioma solicitado, depois o idioma padrão da aplicação, e por fim o primeiro item da lista.
- Lista nula ou vazia, e propriedade com valor nulo, resultam em uma string vazia.
- Propriedades que não são
stringsão convertidas comToString(). - Se
LanguageCodeou a propriedade buscada não existir no tipo, é lançada umaGetInfoException.
5. Idiomas
Funcionalidade: Gerenciamento de idiomas.
Membros:
Default: O código de idioma padrão usado na aplicação. Padrão "en-US".Current: O código de idioma atual do ambiente de execução.CurrentCulture: A cultura atual do ambiente de execução.SetCulture(string? culture): Define a cultura atual usando o nome da cultura no formatoxx-XX.SetCulture(CultureInfo? culture): Define a cultura atual usando um objetoCultureInfo.Instance: A implementação deILanguageusada, substituível em testes. Rejeita valor nulo comArgumentNullException.
A interface Tooark.Utils.Interfaces.ILanguage expõe DefaultLanguage, CurrentLanguage, CurrentCultureInfo, SetCultureInfo(string?) e SetCultureInfo(CultureInfo?).
Comportamento:
- O idioma atual acompanha a cultura do fluxo de execução (
CultureInfo.CurrentCulture), e não um estado global do processo. Em uma aplicação web, cada requisição enxerga apenas a própria cultura. - O nome da cultura é aceito sem diferenciar maiúsculas de minúsculas:
"pt-br"é normalizado para"pt-BR". - Nome nulo, vazio, fora do formato
xx-XXou de uma cultura inexistente resulta na cultura padrão da aplicação. SetCulturetambém defineCultureInfo.CurrentUICulture.
6. Normalização
Funcionalidade: Normalização de strings. Remove espaços e pontuação, converte para maiúscula e translitera caracteres especiais.
Métodos:
Value(string value): Normaliza um valor removendo espaços, convertendo para maiúscula e substituindo caracteres especiais.
7. Mensagens de Erro
Funcionalidade:
Chaves de tradução das mensagens de erro geradas pelo próprio pacote, em Tooark.Utils.Messages.UtilErrorMessages.
Constantes:
FileSizeExceeded:"File.SizeExceeded". Emitida peloFileConvertquando o conteúdo excede o limite, no formatoFile.SizeExceeded;{limite}.
As traduções acompanham os recursos do Tooark.Extensions.
Exemplo de Uso
Conversão de Arquivos e Extração de Extensões
using Tooark.Utils;
using Microsoft.AspNetCore.Http;
using Tooark.Exceptions;
var base64String = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQ...";
// Limite padrão de 5MB
MemoryStream? memoryStream = FileConvert.ToMemoryStream(base64String);
MemoryStream? fromUpload = FileConvert.ToMemoryStream(formFile);
// Limite próprio, em bytes
MemoryStream? grande = FileConvert.ToMemoryStream(formFile, 20 * 1024 * 1024);
MemoryStream? assincrono = await FileConvert.ToMemoryStreamAsync(formFile, cancellationToken: cancellationToken);
string? extension = FileConvert.Extension(base64String); // PNG
string? extensionFromFile = FileConvert.Extension(formFile); // TXT
// Acima do limite, o erro é explícito e já carrega o status HTTP 413
try
{
FileConvert.ToMemoryStream(formFile, 1024);
}
catch (PayloadTooLargeException ex)
{
// ex.Message -> "File.SizeExceeded;1024"
// ex.GetStatusCode() -> HttpStatusCode.RequestEntityTooLarge
}
Validação de Arquivos
using Tooark.Utils;
using Microsoft.AspNetCore.Http;
bool isImage = FileValid.IsImage(formFile);
bool isDocument = FileValid.IsDocument(formFile, 10485760); // 10MB
bool isVideo = FileValid.IsVideo(formFile);
// Com ou sem o ponto inicial, o resultado é o mesmo
bool isCustom = FileValid.IsCustom(formFile, permittedExtensions: ["txt", ".csv"]);
Geração de Strings
using Tooark.Utils;
string sequential = GenerateString.Sequential(27); // AA
string password = GenerateString.Password(); // aB3@dE1#fG2$
string onlyLetters = GenerateString.Password(16, number: false, special: false);
string hex = GenerateString.Hexadecimal(); // 1A2B3C4D5E6F...
string guid = GenerateString.GuidCode(); // 1A2B3C4D5E6F7A8B9C0D1E2F3A4B5C6D
string token = GenerateString.Token(); // 1A2B3C4D5E6F7A8B9C0D1E2F3A4B5C6DADE123E21...
Busca de Informações
using Tooark.Utils;
// O tipo precisa ter a propriedade LanguageCode
var list = new List<MyObject> { /* ... */ };
string name = GetInfo.Name(list);
string title = GetInfo.Title(list);
string description = GetInfo.Description(list);
string keywords = GetInfo.Keywords(list);
// Idioma explícito e propriedade personalizada
string customValue = GetInfo.Custom(list, "CustomProperty", "pt-BR");
Idiomas
using Tooark.Utils;
using System.Globalization;
Language.SetCulture("pt-BR");
string current = Language.Current; // pt-BR
string defaultLanguage = Language.Default; // en-US
CultureInfo currentCulture = Language.CurrentCulture; // pt-BR
// Aceita o nome sem diferenciar maiúsculas de minúsculas
Language.SetCulture("es-es"); // es-ES
// Nome inválido cai na cultura padrão
Language.SetCulture("pt"); // en-US
Normalização
using Tooark.Utils;
string normalizedValue = Normalize.Value("Olá Mundo!"); // OLAMUNDO
string withSymbols = Normalize.Value("R&D 100$"); // RANDD100DOLLAR
Dependências
Contribuição
Contribuições são bem-vindas! Sinta-se à vontade para abrir issues e pull requests no repositório Tooark.Utils.
Licença
Este projeto está licenciado sob a licença BSD 3-Clause. Veja o arquivo LICENSE para mais detalhes.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.AspNetCore.Http (>= 2.3.12)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.11)
- Microsoft.Extensions.Options (>= 10.0.11)
- Tooark.Exceptions (>= 4.0.1)
- Tooark.Validations (>= 4.0.1)
-
net8.0
- Microsoft.AspNetCore.Http (>= 2.3.12)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 8.0.2)
- Microsoft.Extensions.Options (>= 8.0.2)
- Tooark.Exceptions (>= 4.0.1)
- Tooark.Validations (>= 4.0.1)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Tooark.Utils:
| Package | Downloads |
|---|---|
|
Tooark.Extensions
Package for managing extensions and utilities for .NET applications. |
|
|
Tooark
Package with all Tooark resources for .NET applications. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 4.7.1 | 45 | 10/17/2026 |
| 4.7.0 | 348 | 9/30/2026 |
| 4.6.0 | 220 | 9/29/2026 |
| 4.5.0 | 181 | 9/29/2026 |
| 4.4.0 | 176 | 9/28/2026 |
| 4.3.0 | 184 | 9/26/2026 |
| 4.2.1 | 181 | 9/25/2026 |
| 4.2.0 | 204 | 9/20/2026 |
| 4.1.0 | 189 | 9/18/2026 |
| 4.0.1 | 273 | 8/25/2026 |
| 4.0.0 | 222 | 8/25/2026 |
| 3.3.6 | 168 | 9/18/2026 |
| 3.3.5 | 191 | 8/25/2026 |
| 3.3.4 | 369 | 8/12/2026 |
| 3.3.3 | 449 | 7/27/2026 |
| 3.3.2 | 381 | 6/11/2026 |
| 3.3.1 | 235 | 6/6/2026 |
| 2.3.5 | 158 | 9/18/2026 |
| 2.3.4 | 192 | 8/25/2026 |
| 2.3.3 | 207 | 7/27/2026 |