当前位置: 首页 > news >正文

TMultiPartFormData

TMultiPartFormData

unit form.data;
//cxg 2025
interfaceusescore.firedac, core.global, core.firedacpool, core.router, core.log, core.json,core.datasetHelp, core.encoding,DB, Classes, SysUtils, System.Net.Mime, Net.CrossHttpParams;typeTFormDataService = recordprocedure DownloadFile(const ARequest: THttpRequest;const AResponse: THttpResponse);procedure UploadFile(const ARequest: THttpRequest;const AResponse: THttpResponse);procedure Select(const ARequest: THttpRequest;const AResponse: THttpResponse);end;implementationfunction DownloadPath: string;
beginResult := ExtractFilePath(ParamStr(0)) + 'download' + PathDelim;
end;procedure TFormDataService.DownloadFile(const ARequest: THttpRequest;const AResponse: THttpResponse);
varLRequestData: THttpMultiPartFormData;LResponseData: TMultiPartFormData;
beginLResponseData := TMultiPartFormData.Create;trytryTRequestFunc.UnMarshal(ARequest, LRequestData);LResponseData.AddField('success', 'true');LResponseData.AddField('message', '下载成功');LResponseData.AddField('filename', LRequestData.Fields['filename'].AsString);LResponseData.AddFile('file', DownloadPath + LRequestData.Fields['filename'].AsString);TResponseFunc.Send(AResponse, LResponseData);excepton E: Exception dobeginLResponseData.AddField('success', 'false');LResponseData.AddField('message', E.Message);TResponseFunc.Send(AResponse, LResponseData);WriteLog('TFormDataService.DownloadFile()' + E.Message);end;end;finallyLRequestData.Free;end;
end;function UploadPath: string;
beginResult := ExtractFilePath(ParamStr(0)) + 'upload' + PathDelim;
end;procedure TFormDataService.Select(const ARequest: THttpRequest;const AResponse: THttpResponse);
var LDB: TDB;LPool: TDBPool;LRequestData: THttpMultiPartFormData;LResponseData: TMultiPartFormData;i: Integer;LStream: TStream;
beginLResponseData := TMultiPartFormData.Create;trytryTRequestFunc.UnMarshal(ARequest, LRequestData);LPool := GetDBPool(LRequestData.Fields['dbid'].AsString);LDB := LPool.Lock;for i := 0 to LRequestData.Fields['count'].AsString.ToInteger - 1 dobeginLStream := LDB.select3(LRequestData.Fields['sql' + i.ToString].AsString);LStream.Position := 0;LResponseData.AddStream(TConst.Data + i.ToString, LStream);LStream.Free;end;LResponseData.AddField(TConst.Success, 'true');TResponseFunc.Send(AResponse, LResponseData);excepton E: Exception dobeginLResponseData.AddField(TConst.Success, 'false');LResponseData.AddField('message', E.Message);TResponseFunc.Send(AResponse, LResponseData);WriteLog('TFormDataService.Select()' + E.Message);end;end;finallyLPool.Unlock(LDB);LRequestData.Free;end;
end;procedure TFormDataService.UploadFile(const ARequest: THttpRequest;const AResponse: THttpResponse);
varLRequestData: THttpMultiPartFormData;LResponseData: TMultiPartFormData;LMemoryStream: TMemoryStream;
beginLResponseData := TMultiPartFormData.Create;LMemoryStream := TMemoryStream.Create;trytryTRequestFunc.UnMarshal(ARequest, LRequestData);LMemoryStream.CopyFrom(LRequestData.Fields['file'].Value);LMemoryStream.SaveToFile(UploadPath + LRequestData.Fields['filename'].AsString);LResponseData.AddField('success', 'true');LResponseData.AddField('message', '上传成功');TResponseFunc.Send(AResponse, LResponseData);excepton E: Exception dobeginLResponseData.AddField('success', 'false');LResponseData.AddField('message', E.Message);TResponseFunc.Send(AResponse, LResponseData);WriteLog('TFormDataService.DownloadFile()' + E.Message);end;end;finallyLRequestData.Free;end;
end;varFormDataService: TFormDataService;initialization//multipart/form-data apiTRouter.Add('/formdata/downloadfile', FormDataService.DownloadFile);TRouter.Add('/formdata/uploadfile', FormDataService.UploadFile);TRouter.Add('/formdata/select', FormDataService.Select);end.
unit server.api;// cxg 2025
interfaceuses Net.CrossHttpParams,Net.Mime, IdHTTP, System.Net.HttpClientComponent, Net.HttpClient,IniFiles, SysUtils, Classes;varurl: string;typeTHttpClient = TNetHTTPClient;TRpc = record // remote-procedure-call(multipart/form-data)class function UploadFile(const AData: TMultipartFormData): Boolean; static;class function DownloadFile(const AData: TMultipartFormData): THttpMultiPartFormData; static;end;implementationfunction Newhttp: THttpClient;
beginResult := THttpClient.Create(nil);Result.HandleRedirects := True;
end;{ TRpc }class function TRpc.DownloadFile(const AData: TMultipartFormData): THttpMultiPartFormData;
varLHttp: THttpClient;LResponseStream: TMemoryStream;LBoundary: string;
beginif AData = nil thenExit;LHttp := THttpClient.Create(nil);LResponseStream := TMemoryStream.Create;Result := THttpMultiPartFormData.Create;tryLHttp.CustomHeaders['Boundary'] := AData.Boundary;LBoundary := LHttp.Post(url + '/formdata/downloadfile', AData.Stream,LResponseStream).HeaderValue['Boundary'];Result.InitWithBoundary(LBoundary);LResponseStream.Position := 0;Result.Decode(LResponseStream);finallyLHttp.Free;LResponseStream.Free;end;
end;class function TRpc.UploadFile(const AData: TMultipartFormData): Boolean;
varLHttp: THttpClient;LResponseStream: TMemoryStream;LPart: THttpMultiPartFormData;LBoundary: string;
beginif AData = nil thenExit;LHttp := THttpClient.Create(nil);LResponseStream := TMemoryStream.Create;LPart := THttpMultiPartFormData.Create;tryLHttp.CustomHeaders['Boundary'] := AData.Boundary;LBoundary := LHttp.Post(url + '/formdata/uploadfile', AData.Stream,LResponseStream).HeaderValue['Boundary'];LPart.InitWithBoundary(LBoundary);LResponseStream.Position := 0;LPart.Decode(LResponseStream);Result := LPart.Fields['success'].AsString = 'true';finallyLHttp.Free;LResponseStream.Free;LPart.Free;end;
end;procedure ReadConf;
varLIni: TIniFile;
beginLIni := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'client.ini');url := LIni.ReadString('config', 'url', '');LIni.Free;
end;initializationReadConf;end.

 

http://www.jsqmd.com/news/325232/

相关文章:

  • 建丰有机肥生产线性价比高吗?口碑如何?
  • AI写论文不用怕!4款AI论文写作神器,有效提升论文原创性!
  • 【2025年ASOC SCI2区】基于非线性随机重用的变异鲸鱼优化算法及其在工程问题中的应用Matlab代码深度解析+性能实测
  • AI写论文不用愁!这4个AI论文生成工具,全方位助力论文写作!
  • 2026年企业AI智能体官网费用分析,高性价比制造商排名揭晓
  • AI写论文新选择!4款AI论文生成利器,高效完成各类学术论文!
  • 2026年钉钉服务商联系电话推荐:官方合作商联系方式汇总
  • 口碑见证实力:2026厌氧絮状污泥公司优选榜单,市面上厌氧絮状污泥源头厂家解析品牌实力与甄选要点
  • AI写论文新选择!4款AI论文生成工具,助力轻松完成学术论文!
  • 2026年深圳企业AI智能体官网十大核心厂家推荐与选购指南
  • 汽车车身电泳漆推荐品牌性价比排名,飞扬环保科技名列前茅
  • WAN2.2文生视频+SDXL Prompt风格效果展示:‘二十四节气’系列动态插画短视频
  • Linux开发—— USB 虚拟网口配置
  • 结构胶按需定制价格多少钱,佛山有哪些推荐的供应商
  • 讲讲毛绒布小批量定制生产商选哪家
  • 如何为不同经营场景选麻将机?2026年麻将机品牌推荐与评测,直击成本与体验痛点
  • 批量压缩包下载!科哥UNet处理结果获取
  • 2026年佛山高精度滑轨设备厂家排名,哪家性价比高值得推荐?
  • 四川桥架行业综合选购指南:聚焦铝合金、玻璃钢、槽式与大跨距桥架服务商深度分析
  • 雪花ID
  • 2026年杭州割圈绒生产企业选择指南,哪家值得选?
  • F.I.R.E. 计算器:通往财务自由的数字导航仪
  • Linux 多线程编程:互斥锁 (Mutex) —— 给共享资源加上“安全锁” - 详解
  • 聊聊好用的聚氨酯结构胶,这些结构胶品牌商值得关注
  • 极简云端文件格式转换工具:安全高效的在线数据处理助手
  • 数据结构==B-树== - 教程
  • 联友邦精密机械的滑轨成型机好用吗,有哪些品牌优势?
  • 2026年钉钉服务商联系电话推荐:覆盖多区域服务网络
  • 基于SSM的文档管理系统的设计与实现任务书
  • AI事件检测系统:让机器学会“读懂”异常