TWebModuleにおける画像ファイルの場所について

解決


TORI  2020-08-21 14:22:46  No: 149009

お世話になります。

Windows7
DELPHI XE5の環境にて、
ファイル→新規作成→その他→WebBroker→Web サーバーアプリケーションをクリックし、
TWebModuleのDefaultHandlerのOnActionイベントへ画像を表示するだけのソースを記述しました。

procedure TWebModule3.WebModule3DefaultHandlerAction(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
    Response.Content:=
      '<html>                                                               ' +
      ' <head>                                                              ' +
      '   <meta http-equiv="content-type" content="text/html;charset=UTF-8">' +
      '   <title>TEST</title>                                               ' +
      ' </head>                                                             ' +
      ' <body>                                                              ' +
      '   <img src="TestImage.jpg">                                           ' +
      ' </body>                                                             ' +
      '</html>                                                              ';
end;

TestImage.jpgはEXEファイルと同じフォルダへ配置していますが、
実行すると画像が表示されません。
TestImage.jpgはどこに配置するのが正解でしょうか。
又、ルートフォルダーの場所はどこになるのでしょうか。

以上、よろしくお願い致します。


AAA  2020-08-23 00:34:08  No: 149013

>TestImage.jpgはどこに配置するのが正解でしょうか。 
>又、ルートフォルダーの場所はどこになるのでしょうか。

テキストを WebModule3DefaultHandlerAction で返すように
バイナリーも WebModule3DefaultHandlerAction  で自分で返さないとダメ


TORI  2020-08-26 11:36:21  No: 149041

AAA様
ありがとうございます。
返事が遅くなって申しわけありません。

実際は画像では無く音を鳴らしたかったので、
ご教示頂いたように、

OK.MP3 NG.MP3 を http://www.motobit.com/util/base64-decoder-encoder.asp でコンバート後、OK.Text,NG.Textへ保存し、
プログラム内で読み込み、HTMLのsourceへ指定することで音を鳴らすことが出来ました。
ありがとうございます。

以下、参考までにソースの抜粋をあげておきます。

    UsOKSO_Pr := TStringList.Create;
    UsNGSO_Pr := TStringList.Create;
    UsOKSO_Pr.LoadFromFile('OK.txt');
    UsNGSO_Pr.LoadFromFile('NG.txt');

UsOKSO_Pr. .Text ← 
UsNGSO_Pr.Text ← 

    UsSCRP_Pr := '  <script type="text/javascript">                            ' + CR +
                 '    function ring(ArSoundF) {                                ' + CR +
                 '      alert(ArSoundF)                                        ' + CR +
                 '      if (ArSoundF = ''OK'') {                               ' + CR +
                 '        alert("OK")                                          ' + CR +
                 '        document.getElementById("OKSound").play();           ' + CR +
                 '      } else {                                               ' + CR +
                 '        alert("NG")                                          ' + CR +
                 '        document.getElementById("NGSound").play();           ' + CR +
                 '      }                                                      ' + CR +
                 '    }                                                        ' + CR +
                 '  </script>                                                  ' + CR +
                 '  <audio id="OKSound" preload="auto">                        ' + CR +
                 '    <source src="data:audio/wav;base64,' + StringReplace(UsOKSO_Pr.Text,#13#10,'', [rfReplaceAll]) + '" type="audio/mp3" />' + CR +
                 '  </audio>                                                   ' + CR +
                 '  <audio id="NGSound" preload="auto">                        ' + CR +
                 '    <source src="data:audio/wav;base64,' + StringReplace(UsNGSO_Pr.Text,#13#10,'', [rfReplaceAll]) + '" type="audio/mp3" />' + CR +
                 '  </audio>                                                   ';


TORI  2020-08-26 12:34:06  No: 149042

お世話になりました。
解決済みにしておきます。


AAA  2020-08-26 18:01:01  No: 149046

それだと毎回ロードせず変換したテキストを直接htmlに記述すれば良いと思うんだけど・・・・

procedure TWebModule1.WebModule1DefaultHandlerAction(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
  S: String;
begin
    if Request.Method = 'GET' then
    begin
      S := Copy(ReplaceStr(Request.PathInfo,'/','\'),2);
      if S = '' then S := 'index.html';
      if FileExists (S) = True then
      begin
        Response.ContentStream := TFileStream.Create(S,fmOpenRead);
      end;
   end;
end;

index.html は exe と同じフォルダで


TORI  2020-08-31 11:10:56  No: 149072

AAA様

いつもお世話になっております。
ご指摘頂いた件ですが、ユーザーがフォームに入力した値でデータベースを参照しHtmlを動的に生成しているので、
このような形としています。
※その部分のソースは全くアップしていません
又、ロードはサーバーで常時起動しているTWebModuleのCreateで一度呼んでいるだけなので、毎回している訳ではないかと...
以上、よろしくお願い致します。


mam  URL  2020-08-31 14:22:36  No: 149073

https://mam-mam.net/delphi/web.html
の下の方に、外部ファイルを利用する場合のソースコードがあります。
実行ファイルと同じフォルダ内にhtdocsフォルダを作るとドキュメントルートになります。
js css mp3 jpg html等が使えるようになります。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加