Inquiridor
Converter string base64 para um arquivo de Imagem

Pergunta
-
Olá, estou com um pequeno problema, estou recebendo por request.querystring um parametro que seria uma string de base64, no qual estou convertendo para uma imagem, porém quando a imagem é muito grande, tem muitas linhas apresenta erro.
segue aqui o código.
public string Base64ToImage(string base64String, int userId, int task, string Description) { try { byte[] newfile = Convert.FromBase64String(Decompress(base64String)); string diretorio = "c:\\" + userId + "\\" + task; if (Directory.Exists(diretorio)) Directory.Delete(diretorio, true); DirectoryInfo di = Directory.CreateDirectory(diretorio); File.WriteAllBytes(diretorio + @"\" + userId + "_" + task + ".jpg", newfile); return diretorio + @"\" + userId + "_" + task + ".jpg"; } catch (Exception) { return ""; } } public static string Decompress(string compressed) { byte[] compressedBytes = Encoding.ASCII.GetBytes(compressed); MemoryStream mem = new MemoryStream(compressedBytes); GZipStream gzip = new GZipStream(mem, CompressionMode.Decompress); StreamReader reader = new StreamReader(gzip); return reader.ReadToEnd(); }
Tem alguma outra forma simples de converter uma string com mais de 60 mil linhas em uma imagem, sem que apresente erro de falta de memória
Atenciosamente
Marcus Fernando
Todas as Respostas
-
Olá Marcus,
Em qual linha ocorre o erro?
Se o problema estiver no "Encoding.ASCII.GetBytes(compressed);", então é possível que a passagem do código na Base64 via query string esteja sofrendo alteração em algum caracter especial.
Mas, ao meu ver, uma query string tão grande não é uma boa prática e passar a base64 via query string tb não é.
Não existe nenhuma maneira de trafegar os bytes via session e depois limpar a session? Acredito que vc irá poupar mais memória deste modo.
[]s!
MSc. Fernando Henrique Inocêncio Borba Ferreira
Microsoft MVP - Visual C#
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil -
Olá Fernando, na verdade quanto mais linhas pelo que eu pude ver, maior a resolução e estou comunicando um handler com uma aplicação em android , em razao disso passo via url, o que me leva a outro problema, pois a memória de um navegador suporta no máximo 2024 caracteres , em razao disso estou avaliando conversao encode da url e zipar a string para ver se não ultrapassa o limite
O erro ocorre na própria conversão
byte[] newfile = Convert.FromBase64String(Decompress(base64String));
Atenciosamente
Marcus Fernando
-
Fernando, eu fiz receber por post mesmo trabalhando em cima de encode e decode url, segue o exemplo e funciono com qualidade máxima.
} public string Base64ToImage(string base64String, int userId, int task, string name, string extension) { string t = System.Uri.UnescapeDataString(base64String); byte[] newfile = Convert.FromBase64String(t); string diretorio = ConfigurationSettings.AppSettings["UploadPathServiceTemp"] + "\\" + userId + "\\" + task; if (Directory.Exists(diretorio)) Directory.Delete(diretorio, true); DirectoryInfo di = Directory.CreateDirectory(diretorio); File.WriteAllBytes(diretorio + @"\" + name + "." + extension, newfile); return diretorio + @"\" + name + "." + extension; }
Obrigado pela ajuda!!
Atenciosamente
Marcus Fernando