The WiFi shield server firmware is not very stable. It has been known to do weird things, like send the wrong page to a client, or send corrupted files. This normally happens when multiple clients are trying to connect at the same time. The code below shows that the server uses only one socket, so subsequent requests use the same socket, and wrong or corrupted file transfers occur.
This show the status of the wifi sockets. It is the best I can up with for you.
#include <utility/server_drv.h>
void ShowSockStatus() {
for(int x = 0; x < MAX_SOCK_NUM; x++) {
Serial.print(WiFi._state[x]);
Serial.print(" ");
Serial.print(WiFi._server_port[x]);
Serial.print(" s=");
Serial.print(serverDrv.getServerState(x));
Serial.print(" c=");
Serial.print(serverDrv.getClientState(x));
Serial.print(" d=");
Serial.println(serverDrv.availData(x));
}
}