zoukankan      html  css  js  c++  java
  • 使用 IntraWeb (30)


    TIWAppInfo   //IntraWeb 12.2.15 开始使用 TIWAppInfo 来获取应用的相关信息, 和 IWServerController、WebApplication 的某些属性有重复
    TIWMimeTypes //IntraWeb 14.0.11 新增, 可方便处理 Http Mime Types; Mime 类型? 我的理解是: 浏览器接受到一个文件或数据流, 如果让浏览器解析(而不是下载), 浏览器该按什么类型来解析呢? 所以需要指定类型.
    TIWAppCache  //IntraWeb 14.0.29 新增, 可以方便处理缓存文件; 之前有类似的功能, 如: IWServerController.NewCacheFile
    
    {三个类提供的都是 class 方法, 使用时无须实例化}
    


    TIWAppInfo 所在单元及继承链:
    IW.Common.AppInfo.TIWAppInfo < TObject

    主要成员:
    class function GetAppFullFileName: string
    class function GetAppFileName: string
    class function GetAppLogFileName: string
    class function GetAppPath: string
    class function GetAppName: string
    class function GetSystemPath: string
    class function GetTempPath: string
    class function GetCurrentPath: string
    class function GetComputerName: string
    class function GetFileInfo(const aFileName: string; aFileInfo: TFileInfo): string
    class function GetAppVersion: string
    


    测试:
    uses IW.Common.AppInfo;
    
    procedure TIWForm1.IWButton1Click(Sender: TObject);
    var
      str: string;
      i: Integer;
    begin
      IWMemo1.Lines.Add(TIWAppInfo.GetAppFullFileName);
      IWMemo1.Lines.Add(TIWAppInfo.GetAppFileName);
      IWMemo1.Lines.Add(TIWAppInfo.GetAppLogFileName);
      IWMemo1.Lines.Add(TIWAppInfo.GetAppPath);
      IWMemo1.Lines.Add(TIWAppInfo.GetAppName);
      IWMemo1.Lines.Add(TIWAppInfo.GetSystemPath);
      IWMemo1.Lines.Add(TIWAppInfo.GetTempPath);
      IWMemo1.Lines.Add(TIWAppInfo.GetCurrentPath);
      IWMemo1.Lines.Add(TIWAppInfo.GetComputerName);
      IWMemo1.Lines.Add(TIWAppInfo.GetAppVersion);
      IWMemo1.Lines.Add('===============');
    
      for i := 0 to 9 do
      begin
        str := TIWAppInfo.GetFileInfo(TIWAppInfo.GetSystemPath + 'NotePad.exe', TFileInfo(i));
        IWMemo1.Lines.Add(str);
      end;
      IWMemo1.Lines.Add('===============');
    end;
    



    TIWMimeTypes 所在单元及继承链:
    IWMimeTypes.TIWMimeTypes < TObject

    主要成员:
    class function IsStaticFile(const aFileName: string; out aMimeType: string): Boolean //
    class function GetAsString(const aFileExtension: string): string //根据扩展名即可获取类型的标准字符串很方便, 譬如 TIWMimeTypes.GetAsString('.pdf') 将返回 application/pdf
    class function GetAsString(const aMimeType: TMimeType): string   //TIWMimeTypes.GetAsString(mtPDF) 结果也是 application/pdf
    class procedure RegisterType(const aFileExtension: string; const aMimeTypeDesc: string; const aIsStatic: Boolean) //能自行注册
    class procedure UnregisterType(const aFileExtension: string)     //
    
    {IWMimeTypes.TIWMimeType 枚举的定义}
    TIWMimeType = (mtUnknown, mtBinary, mtJPG, mtGIF, mtPNG, mtRSS, mtXML, mtTXT, mtICO, mtHTML, mtJavaScript, mtPDF, mtZIP, mtCSS, mtMP3, mtOGG, mtWAV, mtEXE, mtFlash, mtWMV, mtMOV, mtAVI, mtMPEG, mtXSL);
    
    {IWMimeTypes 单元提供的常用的 Mime 类型常量}
    MIME_JPG        =  'image/jpeg';                             
    MIME_GIF        =  'image/gif';                              
    MIME_PNG        =  'image/png';                              
    MIME_RSS        =  'application/rss+xml; charset=UTF-8';     
    MIME_XML        =  'text/xml; charset=UTF-8';                
    MIME_XSL        =  'text/xsl; charset=UTF-8';                
    MIME_TXT        =  'text/plain; charset=UTF-8';              
    MIME_ICO        =  'image/x-ico';                            
    MIME_JavaScript =  'application/x-javascript; charset=UTF-8';
    MIME_PDF        =  'application/pdf';                        
    MIME_CSS        =  'text/css; charset=UTF-8';                
    MIME_MP3        =  'audio/mpeg';                             
    MIME_OGG        =  'audio/ogg';                              
    MIME_WAV        =  'audio/wav';                              
    MIME_Flash      =  'application/x-shockwave-flash';          
    MIME_WMV        =  'video/x-ms-wmv';                         
    MIME_MOV        =  'video/quicktime';                        
    MIME_AVI        =  'video/x-msvideo';                        
    MIME_MPEG       =  'video/mpeg';                             
    MIME_Binary     =  'application/octet-stream';               
    MIME_HTML       =  'text/html; charset=UTF-8';
    
    { 更多不常用的类型可参见: http://www.iana.org/assignments/media-types/media-types.xhtml }
    



    TIWAppCache 所在单元及继承链:
    IWAppCache.TIWAppCache < TObject

    主要成员:
    {建立缓存流; 如需特别指定第一个参数时, 不如选用下面三个函数}
    class procedure NewCacheStream(aOwner: TObject; 	       //建立页面级的缓存要指定当前窗体(一般用 Self); 建立 Session 级缓存可指定 WebApplication; 建立应用级缓存指定 nil 
                                   const aContentType: string;     //Mime Type 字符串, 如: application/pdf
    			       aCacheType: TCacheType; 	       //缓存期选项:ctOneTime、ctApp、ctSession、ctForm
    			       out ACacheStream: TCacheStream; //输出流
    			       out aFileHRef: string	       //输出缓存文件地址
    			       )
    {建立建立应用级缓存流; 参数 1 将被忽略, 其它同上}
    class procedure NewAppCacheStream(aOwner: TObject; const aContentType: string; out ACacheStream: TCacheStream; out aFileHRef: string)
    
    {建立建立 Session 级缓存流; 参数 1 将被忽略, 其它同上}
    class procedure NewSessionCacheStream(aOwner: TObject; const aContentType: string; out ACacheStream: TCacheStream; out aFileHRef: string)
    
    {建立建立页面级缓存流; 参数 1 将被忽略, 其它同上}
    class procedure NewFormCacheStream(aOwner: TObject; const aContentType: string; out ACacheStream: TCacheStream; out aFileHRef: string)
    
    {保存流到缓存文件}
    class function StreamToCacheFile(aOwner: TObject; AStream: TStream; const aContentType: string; const aCacheType: TCacheType): string
    
    {保存图像到缓存文件}
    class function GraphicToCacheFile(aOwner: TObject; AGraphic: TGraphic; const aCacheType: TCacheType; const PreferPNG: Boolean): string
    class function GraphicToCacheFile(aOwner: TObject; AGraphic: TGraphic; imgType: TIWImageOutput; const aCacheType: TCacheType): string  //TIWImageOutput = (ioGIF, ioJPEG, ioPNG)
    
    {保存资源到缓存文件}
    class function ResourceToCacheFile(aOwner: TObject; const aResourceName: string; const aContentType: string; const aCacheType: TCacheType): string
    
    {情况缓存}
    class function ClearCache(ACacheList: TStrings): Integer
    
    {创建一个临时文件, 位置在用户临时文件夹}
    class function NewTempFileName: string
    
    {添加文件到缓存}
    class function AddFileToCache(aOwner: TObject; const aFileName: string; const aContentType: string; const aCacheType: TCacheType): string
    


    测试 - 将资源中的图片提取到缓存, 然后呈现出来:

    uses IWAppCache, IWServerInternalFiles;
    
    procedure TIWForm1.IWButton1Click(Sender: TObject);
    var
      fStream: TStream;
      fPath: string;
    begin
      fStream := TIWServerInternalFiles.GetResourceStream('IW_GFX_LogoIntraWeb');
      fPath := TIWAppCache.StreamToCacheFile(Self, fStream, 'image/png');
      IWImageFile1.ImageFile.Filename := fPath;
      fStream.Free;
    end;
    


    常用路径:

    {获取代码:-------------------------------------------------------}
    uses ServerController, IW.Common.AppInfo;
    
    procedure TIWForm1.IWAppFormCreate(Sender: TObject);
    begin
      IWMemo1.Lines.Add(IWServerController.ContentPath + #9'{IWServerController.ContentPath}');
      IWMemo1.Lines.Add(IWServerController.CacheDir + #9'{IWServerController.CacheDir}');
      IWMemo1.Lines.Add(IWServerController.TemplateDir + #9'{IWServerController.TemplateDir}' + sLineBreak);
    
      IWMemo1.Lines.Add(WebApplication.AppUrlBase + #9'{WebApplication.AppUrlBase}');
      IWMemo1.Lines.Add(WebApplication.InternalUrlBase + #9'{WebApplication.InternalUrlBase}');
      IWMemo1.Lines.Add(WebApplication.SessionInternalUrlBase + #9'{WebApplication.SessionInternalUrlBase}');
      IWMemo1.Lines.Add(WebApplication.SessionUrlBase + #9'{WebApplication.SessionUrlBase}');
      IWMemo1.Lines.Add(WebApplication.UserCacheUrlBase + #9'{WebApplication.UserCacheUrlBase}');
      IWMemo1.Lines.Add(WebApplication.ApplicationURL + #9'{WebApplication.ApplicationURL}');
      IWMemo1.Lines.Add(WebApplication.ApplicationPath + #9'{WebApplication.ApplicationPath}');
      IWMemo1.Lines.Add(WebApplication.ReferringURL + #9'{WebApplication.ReferringURL}');
      IWMemo1.Lines.Add(WebApplication.UserCacheDir + #9'{WebApplication.UserCacheDir}' + sLineBreak);
    
      IWMemo1.Lines.Add(TIWAppInfo.GetAppFullFileName + #9'{TIWAppInfo.GetAppFullFileName}');
      IWMemo1.Lines.Add(TIWAppInfo.GetAppPath + #9'{TIWAppInfo.GetAppPath}');
      IWMemo1.Lines.Add(TIWAppInfo.GetAppFileName + #9'{TIWAppInfo.GetAppFileName}');
      IWMemo1.Lines.Add(TIWAppInfo.GetAppName + #9'{TIWAppInfo.GetAppName}');
      IWMemo1.Lines.Add(TIWAppInfo.GetTempPath + #9'{TIWAppInfo.GetTempPath}');
      IWMemo1.Lines.Add(TIWAppInfo.GetCurrentPath + #9'{TIWAppInfo.GetCurrentPath}');
    end;
    
    {参考结果:-------------------------------------------------------}
    
    C:UserswyDocumentsRAD StudioProjectsMyTest6Win32Debugwwwroot	{IWServerController.ContentPath}
    C:UserswyAppDataLocalTemp1a3ozdw6r	{IWServerController.CacheDir}
    C:UserswyDocumentsRAD StudioProjectsMyTest6Win32DebugTemplates	{IWServerController.TemplateDir}
    
    /	{WebApplication.AppUrlBase}
    /$/	{WebApplication.InternalUrlBase}
    /$/	{WebApplication.SessionInternalUrlBase}
    /	{WebApplication.SessionUrlBase}
    /$/MyApp/0pnlkje0r4hi7j19tzrq30eq0k2i/	{WebApplication.UserCacheUrlBase}
    http://127.0.0.1:3126	{WebApplication.ApplicationURL}
    C:UserswyDocumentsRAD StudioProjectsMyTest6Win32Debug	{WebApplication.ApplicationPath}
    http://127.0.0.1:3126/$/start	{WebApplication.ReferringURL}
    C:UserswyAppDataLocalTemp1a3ozdw6ruserpnlkje0r4hi7j19tzrq30eq0k2i	{WebApplication.UserCacheDir}
    
    C:UserswyDocumentsRAD StudioProjectsMyTest6Win32DebugMyTest6.exe	{TIWAppInfo.GetAppFullFileName}
    C:UserswyDocumentsRAD StudioProjectsMyTest6Win32Debug	{TIWAppInfo.GetAppPath}
    MyTest6.exe	{TIWAppInfo.GetAppFileName}
    MyTest6	{TIWAppInfo.GetAppName}
    C:UserswyAppDataLocalTemp	{TIWAppInfo.GetTempPath}
    C:UserswyDocumentsRAD StudioProjectsMyTest6Win32Debug	{TIWAppInfo.GetCurrentPath}
    

  • 相关阅读:
    《C# to IL》第一章 IL入门
    multiple users to one ec2 instance setup
    Route53 health check与 Cloudwatch alarm 没法绑定
    rsync aws ec2 pem
    通过jvm 查看死锁
    wait, notify 使用清晰讲解
    for aws associate exam
    docker 容器不能联网
    本地运行aws lambda credential 配置 (missing credential config error)
    Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?
  • 原文地址:https://www.cnblogs.com/HuiLove/p/4164460.html
Copyright © 2011-2022 走看看