1

Delphi XE3、DataSnap/WebBroker、HTML の使用

を作成してロードし、TStringListそれをファイルに保存します。ファイルの場所を HTML フォームのアクションに入れ、ダウンロードを強制します。ファイルを保存せずにこれを行うにはどうすればよいですか?

MyList := TStringList.Create;  (leaving out try/finally, etc.)
MyList.Add() ....
MyList.SaveToFile(MyFullFileName); 
MyList.Free;

この HTML を に戻すWebModuleDefaultHandler:

<html><head /> 
  <body onload="document.FormOne.submit()"> 
    <form id="FormOne" name="FormOne" method="get" 
            action="MyFullFileName"> 
        <input type="submit" id="btSubmit1" name="btSubmit1"  /> 
    </form>
  </body>
</html>

MyList最初に保存せずに送信できる方法はありますか?

(受信者は、Delphi クライアントではなく、標準ブラウザを使用しています)

4

1 に答える 1

2

メモリストリームとしてそれを行う...

MyStream:= TMemoryStream.Create;
try
  MyList:= TStringList.Create;
  try
    MyList.Add() ...
    MyList.SaveToStream(MyStream);
  finally
    MyList.Free;
  end;
  MyStream.Position:= 0;
  Response.ContentType:= 'text/html';
  Response.ContentStream:= MyStream;
finally
  MyStream.Free;
end;

リクエストがクライアントからサーバーに入ってきたら、ストリームMyStreamを ResponseContentStreamフィールドとして返す必要があります。何かを行う前に、必ずストリームを 0 に戻すことを忘れないでください!

あるいは、文字列リストのTextプロパティを使用して行うこともできます。そのようです...

  MyList:= TStringList.Create;
  try
    MyList.Add('<html>');
    MyList.Add('<heading/>');
    MyList.Add('<body>DataSnap Server</body>');
    MyList.Add('</html>');
    Response.ContentType:= 'text/plain';
    Response.Content:= MyList.Text;
  finally
    MyList.Free;
  end;

通常、画像などの生ファイルをロード/保存/ホストする必要がある場合は、ストリームを使用するのが最適です。キャンバスに描画し、そのキャンバスを JPG 画像に変換し、ファイルではなくストリームとして保存すると非常に便利です。次に、として渡しますResponse.ContentStream。したがって、コンテンツを返すより標準的な方法であるストリームの使用に慣れてきました。

PS - このファイルをプレーン テキストとして表示できるようにする場合ContentTypeは、 を使用するtext/plainか、任意のタイプのファイルをファイルとしてダウンロードする場合は、 fortest.txtを使用できます。application/octet-streamContentType

于 2013-06-26T07:09:45.990 に答える