使用 IntraWeb (30) - TIWAppInfo、TIWMimeTypes、TIWAppCache
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
主要成员:
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
主要成员:
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
主要成员:
{建立缓存流; 如需特别指定第一个参数时, 不如选用下面三个函数}
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:\Users\wy\Documents\RAD Studio\Projects\MyTest6\Win32\Debug\wwwroot\ {IWServerController.ContentPath}
C:\Users\wy\AppData\Local\Temp\01a3ozdw6r\ {IWServerController.CacheDir}
C:\Users\wy\Documents\RAD Studio\Projects\MyTest6\Win32\Debug\Templates\ {IWServerController.TemplateDir} / {WebApplication.AppUrlBase}
/$/ {WebApplication.InternalUrlBase}
/$/ {WebApplication.SessionInternalUrlBase}
/ {WebApplication.SessionUrlBase}
/$/MyApp/0pnlkje0r4hi7j19tzrq30eq0k2i/ {WebApplication.UserCacheUrlBase}
http://127.0.0.1:3126 {WebApplication.ApplicationURL}
C:\Users\wy\Documents\RAD Studio\Projects\MyTest6\Win32\Debug\ {WebApplication.ApplicationPath}
http://127.0.0.1:3126/$/start {WebApplication.ReferringURL}
C:\Users\wy\AppData\Local\Temp\01a3ozdw6r\user\0pnlkje0r4hi7j19tzrq30eq0k2i\ {WebApplication.UserCacheDir} C:\Users\wy\Documents\RAD Studio\Projects\MyTest6\Win32\Debug\MyTest6.exe {TIWAppInfo.GetAppFullFileName}
C:\Users\wy\Documents\RAD Studio\Projects\MyTest6\Win32\Debug\ {TIWAppInfo.GetAppPath}
MyTest6.exe {TIWAppInfo.GetAppFileName}
MyTest6 {TIWAppInfo.GetAppName}
C:\Users\wy\AppData\Local\Temp\ {TIWAppInfo.GetTempPath}
C:\Users\wy\Documents\RAD Studio\Projects\MyTest6\Win32\Debug\ {TIWAppInfo.GetCurrentPath}
使用 IntraWeb (30) - TIWAppInfo、TIWMimeTypes、TIWAppCache的更多相关文章
- IntraWeb XIV 类型速查表
tkClass ================== IWUserSessionBase.TIWUserSessionBase < TDataModule < TComponent < ...
- 使用 IntraWeb (45) - 活用 IntraWeb
asp.net 刚开始时, 也是拖拉控件, 但后来有了 MVC.xNext. 换个思路使用 IntraWeb 吧: 界面全部用 html+js+css 实现(有些会是用 Delphi 动态生成), 然 ...
- 总结30个CSS3选择器
或许大家平时总是在用的选择器都是:#id .class 以及标签选择器.可是这些还远远不够,为了在开发中更加得心应手,本文总结了30个CSS3选择器,希望对大家有所帮助. 1 *:通用选择器 ;; ...
- 值得收藏!国外最佳互联网安全博客TOP 30
如果你是网络安全从业人员,其中重要的工作便是了解安全行业的最新资讯以及技术趋势,那么浏览各大安全博客网站或许是信息来源最好的方法之一.最近有国外网站对50多个互联网安全博客做了相关排名,小编整理其中排 ...
- CSharpGL(30)用条件渲染(Conditional Rendering)来提升OpenGL的渲染效率
CSharpGL(30)用条件渲染(Conditional Rendering)来提升OpenGL的渲染效率 当场景中有比较复杂的模型时,条件渲染能够加速对复杂模型的渲染. 条件渲染(Conditio ...
- 30分钟学会XAML
1.狂妄的WPF 相对传统的Windows图形编程,需要做很多复杂的工作,引用许多不同的API.例如:WinForm(带控件表单).GDI+(2D图形).DirectX API(3D图形)以及流媒体和 ...
- Shell脚本编程30分钟入门
Shell脚本编程30分钟入门 转载地址: Shell脚本编程30分钟入门 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_t ...
- ViEmu 3.6.0 过期 解除30天限制的方法
下载:链接: http://pan.baidu.com/s/1c2HUuWw 密码: sak8 删除下面2个地方 HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{B9CDA4 ...
- AlloyTouch全屏滚动插件发布--30秒搞定顺滑H5页
原文链接:https://github.com/AlloyTeam/AlloyTouch/wiki/AlloyTouch-FullPage-Plugin 先验货 插件代码可以在这里找到. 注意,虽然是 ...
随机推荐
- HTML常用特殊字符
网页特殊符号HTML代码大全 HTML特殊字符编码大全:往网页中输入特殊字符,需在html代码中加入以&开头的字母组合或以&#开头的数字.下面就是以字母或数字表示的特殊符号大全. ...
- PYTHON-TCP 粘包
1.TCP的模板代码 收发消息的循环 通讯循环 不断的连接客户端循环 连接循环 判断 用于判断客户端异常退出(抛异常)或close(死循环) 半连接池backlog listen(5) 占用的是内存空 ...
- 《java程序设计》结对编程-四则运算(第一周-阶段总结)
一.需求分析(描述自己对需求的理解,以及后续扩展的可能性) 实现一个命令行程序,要求: - 自动生成小学四则运算题目(加,减,乘,除) - 支持整数 - 支持多运算符(比如生成包含100个运算符的题目 ...
- java tomcat linux 环境变量设置
一https://www.cnblogs.com/hanshuai/p/9604730.html :whereis java //查找java 安装路径:which java //查找java 执行路 ...
- 性能测试十四:Xshell链接linux虚拟机
一.先装一个linux虚拟机 VBox+centos1.先下载Linux镜像文件的ovf或者OVA文件2.打开vbox,点击菜单栏“管理”-“导入虚拟电脑3.选择解压路径中的ovf或者OVA文件,点击 ...
- 线上Slave报1062的案例
最近经常线上的Slave老报1062的错误,蛋碎一地,幸好Slave暂时没有用到业务上,也就是说没有做读写分离,所以Slave有问题,影响也不大,但每隔一阵子就报1062主键冲突的错误,让我好纠结,如 ...
- Oracle学习笔记--第2章 oracle 数据库体系结构
第2章 oracle 数据库体系结构 目录: ————————————— 2.1物理存储结构 2.1.1数据文件 2.2.2控制文件 2.1.3重做日志文件 2.1.4其他文件 2.2逻辑存储结构 2 ...
- JQuery中的Ajax(六)
一:Ajax请求jQuery.ajax(options) load(url,[data],[callback])jQuery.get(url,[data],[callback]) jQuery.get ...
- 【C++ Primer | 15】虚继承
虚基类 一.虚基类介绍 多继承时很容易产生命名冲突,即使我们很小心地将所有类中的成员变量和成员函数都命名为不同的名字,命名冲突依然有可能发生,比如非常经典的菱形继承层次.如下图所示: 类A派生出类B和 ...
- 移除powerdesigner中Recent Files中无效链接的文件
最近总算折腾清楚了,如何删除PowerDesigner中Recent Files或者recent models中不想显示的PDM文件链接: 解决方案: 将原文件的名称改变下,点击原先的文件链接,提示已 ...