私はブラウザで動作する必要がある単純なサーバーで作業しています。私がそれにいくつかのコマンドを与えるとき、それは私の答えに答えるためにいくつかのhtmlコードで私に答えなければなりません。たとえば、フォルダなどのファイルのリストを表示できます。localhost:port / somecommandを使用してサーバーにアクセスできます。現在、ローカルハードディスクからファイルをダウンロードする作業を行っています。私がやりたいのは、localhost:port / download / filepathのようなURLを入力し、ブラウザーにそれをダウンロードさせることです。返信を作成するとき、ダウンロードするファイルがあることをhtmlが理解するために必要なすべてのものを入力します。実際、ファイルをダウンロードするように求める従来のポップアップウィンドウがありますが、受け取ったものは元のファイルよりも大きくなります。ハードディスクに、そして実際にはファイルが破損しています。ここにコードがあります:
これは私が送り返すhtmlです
HTTP/1.0 200 OK
Date: Tue Apr 10 16:23:55 2012
Content-Type: application/octet-stream
Content-Disposition: attachment; filename=mypic.jpg
Content-Length: 2574359
//empty line here
(私はContent-Dispositionヘッダーフィールドのテキストに従いました)
次に、ファイルから読み取り、最初にhtmlを送り返し、次にファイルから読み取ったものを送り返します。
int file=open(name,O_RDONLY);
void * data=malloc(buf.st_size+1); //buf.st_size is the correct file size
size_t readed=read(file,data,buf.st_size);
send(sd_current, html, DIRSIZE, 0); //html is a string containing what you I showed you
send(sd_current, data, readed);
この結果、localhost:port / download / filepathを使用してダウンロードできるファイルが元のファイルよりも大きくなり、破損しましたが、その理由を取り除くことはできません。誰かが私を助けることができますか?