私は次のHTTPサーバーを作成しました。
import processing.net.*;
import java.io.FileInputStream;
import javax.activation.MimetypesFileTypeMap;
Client client = null;
Server server = null;
MimetypesFileTypeMap mimeMap = new MimetypesFileTypeMap();
void setup()
{
server = new Server(this, 80);
println(1);
size(700, 700);
fill(0);
mimeMap.addMimeTypes("application/bmp bmp BMP Bmp");
}
void draw()
{
background(255);
while ( (client = server.available ()) == null) {
}
println(2);
String req = "";
String fileN;
byte[] fileC;
while (client.available () != 0) {
req += client.readString();
try {
Thread.sleep(100);
}
catch (Throwable t) {
}
}
println(req);
fileN = URLDecoder.decode(req.split(" ")[1].substring(1));
if (!fileN.equals("")) {
try
{
FileInputStream fileS = new FileInputStream("C:\\" + fileN);
fileC = new byte[fileS.available()];
fileS.read(fileC);
server.write(
concatSB(
"HTTP/1.0 200 OK\r\nContent-Type: " +
mimeMap.getContentType(fileN.substring( fileN.lastIndexOf("/") + 1 )) +
"\r\nContent-Length: " +
fileC.length +
"\r\n\r\n",
fileC
)
);
println(3);
println(fileN);
}
catch (Exception e)
{
server.write("HTTP/1.0 404 Not Found\r\n".getBytes());
println(fileN + ": " + e.toString());
}
}
exit();
}
void mouseClicked()
{
server.stop();
exit();
}
private byte[] concatSB(final String strng, final byte[] bytes) {
final StringBuilder sb = new StringBuilder(strng);
for (byte b : bytes) {
sb.append((char)b);
}
println(strng);
return sb.toString().getBytes();
}
テキストには非常にうまく機能しますが、このBMPを送信したとき:
このBMPを取り出しました。これは、Paintで自動的に開きます。
PaintでオリジナルをGIFに変換すると、サーバーから結果を読み取ることができず、IEでは悪い画像アイコン(赤いX)が表示されました。
どうすればこれを修正できますか?