In effetti un bel taglio alla ram potresti darlo usando un po' di flash.
Però il problema di base è che non cè nulla nel tuo programma che analizzi la request che fa il client al server.
Quando il browser chiede ad arduino un file nel pacchetto di richiesta ci sono molte informazioni tra le quali appunto il nome del file e l'estensione
esempio
POST /foo.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://localhost/test.php
Content-Type: application/x-www-form-urlencoded
Content-Length: 43
quel programma non è in grado di inviare file su richiesta, è vero che arduino spedisce index.htm, ma non è il browser a chiedere espressamente quel file, viene inviato automaticamente quando vede una connessione, però puoi dire al client di andare a prendere l'immagine su qualche sito a un link ben definito, come caricare ad esempio l'interprete javascript e altre parti utili sempre prelevate esternamente, in questo caso il peso delle immagini hanno poca importanza dato che le gestirà il pc o comunque un computer più potente di arduino..
Oppure cercare googlando un po' webserversd, webduinosd, tinywebserver, ecc
Dipende dalle tue conoscenze sul protocollo http, ti servirà un po' di javascript e html, però dubito che sulla UNO ci farai grandi cose hai troppa poca ram e velocità insufficiente per gestire SD, ethernet, e processi vari di base dello sketch.
Non è escluso che mentre arduino è impegnato a inviarti i dati o a leggere da SD si perda qualche commutazione su qualche pin e salti delle parti di controllo.
Intanto quei client.print e serial.print che hanno stringhe fisse puoi caricarli su flash come ti hanno detto post indietro, usando
client.println(F("Content-Type: text/xml"));
http://playground.arduino.cc/Main/Printf
poi se togli Serial.begin(9600); e tutti i serialprint che non ti servono avrai qualche risorsa in più
ciao