Encode file contents in base64

This article has been written before more than 24months, information might old.

Probabil ca ati auzit deja de „inline-images” , este aceea metoda prin care o imagine este importata intr-o pagina web prin intermediul folosiri continutului imagini encriptat in base64 , se poate face asta in php prin :

Dar stim deja ca daca pui o astfel de linie intr-un document web(css , php ) nu va fi deloc indicat pentru ca se face acel encode la fiecare incarcare a documentului si asta nu este bine pentru ca se consuma cpu in plus la servar . Cel mai bine e sa puneti direct encode-ul base64 direct in document gen :

<img src="data:image/gif;base64,R0lGODlhEAAO
ALMAAOazT
oeHh0tLS/7LZv/0jvb29t/f3//Ub/
/ge8WSLf/rhf/3kdbW1mxsbP//mf///yH5BAAAAAAALAAAAAAQAA4AAARe8L
1Ekyky67QZ1hLnjM5UUde
0ECwLJoExKcpp
V0aCcGCmTIHEIUEqjgaORCMxIC6e0CcguWw6aFjsVMkkIr7g7
7ZKPJjPZqIyd7sJAgVG
oEGv2xsBxqNgYPj/gAwXEQA7" alt="embedded folder icon" width="16" height="14" />

Respectiv in css :

element.classa
{
	background:url(data:image/gif;base64,R0lGODlhEAA
OALMAAOazT
oeHh0tLS/7LZv/0jvb29t/f3//Ub/
/ge8WSLf/rhf/3kdbW1mxsbP//mf///yH5BAAAAAAALAAAAA
AQAA4AAARe8L1Eky
ky67QZ1hLnjM5
UUde0ECwLJoExK
cppV0aCcGCmTIHEIUEqjgaORCMxIC6e0CcguWw6aFjsVM
kkIr7g77ZKPJ
jPZqIyd7sJAgVGoEGv2xsBxqNgYPj/gAwXEQA7)
top left no-repeat; )
	height:14px;
}

Dar intervine intrebarea de unde facem rost de acest encode al continutului unei imagini ?
Pai exista multe metode insa eu vin cu o mica simplificare decat sa folosesti scripturi php , sau alte metode ineficiente poti sa folosesti o mica aplicatie facuta in c# .
Poate iti foloseste si pentru alte lucruri insa eu am facut-o strict pentru motivul de mai sus , poate sa encodeze orice continut al oricarui fisier in base64 , bine sunt niste limite si ar fi bine sa nu bagati fisiere mari pentru ca e logic ca probabil programul se va bloca incercand sa transforme in text miliarde de bytes , in orice caz are limita la 200000 de caractere .

Sursa(nu o pun in integritate pentru ca ce nu pun este ” cod UI ” care nu are sens sa il mai pun ca ala nici nu trb scris … ) :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace base64content
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Stream pula_stream = null;

         OpenFileDialog fisier_pula = new OpenFileDialog();
         if (fisier_pula.ShowDialog() == DialogResult.OK)
         {
              try
        {
            if ((pula_stream = fisier_pula.OpenFile()) != null)
            {
                using (pula_stream)
                { 

                    string pula_marime = pula_stream.Length.ToString();
                    int pula_mea_marime = Convert.ToInt32(pula_marime);
                   string pula_final = Convert.ToBase64String(ReadFully(pula_stream, pula_mea_marime));
                   textBox1.Text = pula_final;
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
        }
    }

         }

        public static byte[] ReadFully(Stream stream, int initialLength)
        {

            if (initialLength &lt; 1)
            {
                initialLength = 32768;
            }

            byte[] buffer = new byte[initialLength];
            int read = 0;

            int chunk;
            while ((chunk = stream.Read(buffer, read, buffer.Length - read)) &gt; 0)
            {
                read += chunk;

                if (read == buffer.Length)
                {
                    int nextByte = stream.ReadByte();

                    if (nextByte == -1)
                    {
                        return buffer;
                    }

                    byte[] newBuffer = new byte[buffer.Length * 2];
                    Array.Copy(buffer, newBuffer, buffer.Length);
                    newBuffer[read] = (byte)nextByte;
                    buffer = newBuffer;
                    read++;
                }
            }

            byte[] ret = new byte[read];
            Array.Copy(buffer, ret, read);
            return ret;
        }

        }
    }

Executabilul compilat poate fi downloadat de : aici

Am pus si un mic video cu o demonstratie simpla a functionabilitatii :

YouTube previzualizare imagini
Share the joy

Leave a Reply