Delphi SOAP:在调度响应后删除临时文件
发布时间:2020-12-15 09:21:22 所属栏目:大数据 来源:网络整理
导读:我有一个肥皂方法,即时创建和回复PDF内容. 最后在方法上,临时pdf文件被删除. 它最终是执行此操作的正确位置? procedure TWbModule.WbModuleGetPDFAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);var aPDFFi
我有一个肥皂方法,即时创建和回复PDF内容.
最后在方法上,临时pdf文件被删除. 它最终是执行此操作的正确位置? procedure TWbModule.WbModuleGetPDFAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); var aPDFFileTemp : string; begin try // getTempPdf() creates and returns the PDF path,eg.: C:filesfoo.pdf aPDFFileTemp := getTempPdf(); // set response content stream with file stream Response.ContentStream := TFileStream.Create(aPDFFileTemp,fmOpenRead or fmShareDenyNone); Response.ContentType := 'application/pdf'; finally // delete temporary file // It is the right place for perform this operation? if FileExists(aPDFFileTemp) then DeleteFile(aPDFFileTemp ); end; end; 解决方法
如果您只想拥有一个临时文件,那么您应该将其创建为临时文件.
此类使用临时和自毁文件创建流. uses System.Classes; type TTempFileStream = class( THandleStream ) public constructor Create( ); destructor Destroy; override; end; implementation uses System.IOUtils,System.SysUtils,Winapi.Windows; { TTempFileStream } constructor TTempFileStream.Create; var fileName : string; fileHandle: THandle; begin fileName := TPath.GetTempFileName( ); fileHandle := CreateFile( PChar( fileName ),GENERIC_ALL,nil,CREATE_ALWAYS,FILE_ATTRIBUTE_TEMPORARY or FILE_FLAG_DELETE_ON_CLOSE,0 ); if fileHandle = INVALID_HANDLE_VALUE then RaiseLastOSError( GetLastError,sLineBreak + fileName ); inherited Create( fileHandle ); end; destructor TTempFileStream.Destroy; begin CloseHandle( Handle ); inherited; end; 最好的选择是将数据(PDF内容)写入此TTempFileStream并从getTempPdf()返回实例 function getTempPdf() : TStream; begin Result := TTempFileStream.Create; // create the PDF document and write into the result stream end; procedure TWbModule.WbModuleGetPDFAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); begin Response.ContentStream := getTempPdf(); Response.ContentType := 'application/pdf'; end; 发送响应时,将释放流并删除该文件. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |