分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

kbmmw 的HTTPSmartService 上传文件到服务器端

发布时间:2023-09-06 02:04责任编辑:郭大石关键词:暂无标签

前面我写过了 HTTPSmartService 使用介绍,可以参见以前的文章。

前一向有同学问如何在http 页面表单上上传文件。一直没有时间回答,自己简单做了例子,

发现无法实现功能,今天花了一天时间,发现了几个坑,终于填平了。

主要原因是kbmmw 本身有点小问题,要小修改一下,注意,我使用的版本是 kbmmw 5.6.20

 修改kbmMWHTTPUtils.pas 内容如下:

function TkbmMWHTTPMultiPart.GetAsBytes:TBytes;var ??p:PByte; ??i:integer;begin ????SetLength(Result,FDataLength); ????p:=PByte(FOwner.FStream.Memory); ????inc(p,FDataOfs); ????Move(p^,Result[0],FDataLength);end;function TkbmMWHTTPMultiPart.GetAsString:string;begin ???Result:=TkbmMWPlatformMarshal.UTF8Decode(GetData,FDataLength);end; 

准备工作做完了。现在开始例子。

首先我们把上次的html 页面改成可以上传文件的格式

<body><table width="770" border="0" align="center" cellpadding="0" cellspacing="0" class="unnamed2"> ?<tr> ??????????<td width="848" align="center"><span class="style1">北京美语学院2009年新生录取查询</span><br></td> ?</tr> ?<form name="form1" method="post" action="/xalionrest/postfile" enctype="multipart/form-data" > ?<tr> ???<td align="center"> ????????????<span class="style2">姓名:</span> ?????????<input name="xsxm" type="text" id="xsxm"> ??????????<span class="style2">身份证号:</span> ?????????<input name="sfzh" type="text" id="sfzh"> ??????????<span class="style2">文件上传:</span> ???????????<input type="file" id="MyUpload" name="MyUpload"> ????</td> ?</tr> ???<tr> ???<td align="center"> ?????<br> ?????<input type="submit" name="Submit" value="提交" onClick="return B1_onclick()">         ?????<input type="reset" name="Submit" value="重置"> ???</td> ?</tr> </form> </table><br><table width="770" border="0" align="center" cellpadding="0" cellspacing="0" class="unnamed3"> ?<tr> ???<td></td> ?</tr></table><br><br><table width="770" border="0" align="center" cellpadding="0" cellspacing="0"> ?<tr> ???<td align="center"><a href="/web/lqcx">返回查询页面</a></td> ?</tr></table></body>

里面加入了文件上传的部分。

用浏览器打开,如下图

输入文件的地方也显示出来了。

对应服务器上的代码如下:

 ?[kbmMW_Rest(‘method:post, path:postfile‘)] ????[kbmMW_Method] ????function postfile:string;//---------------------------------------------------------//function TkbmMWCustomHTTPSmartService1.postfile: string;var ?mp: TkbmMWHTTPMultiParts; ?bd,s,xsxm,sfzh:string; ?sname:string; ??f:TkbmMWHTTPMimeHeaderValueFields; ?p:Tbytes; ?hlp:TkbmMWHTTPTransportStreamHelper; ?I,fsize: Integer; ?fs:Tfilestream;begin ???hlp:=TkbmMWHTTPTransportStreamHelper(RequestTransportStream.Helper); ??f:=hlp.Header.ValueFields[‘Content-Type‘]; ??if f=nil then ?????exit; ??bd:=f.ValueByName[‘boundary‘]; ???if bd=‘‘ then ?????begin ??????result:=‘can‘‘t find file!‘; ???????exit; ?????end; ???mp:=TkbmMWHTTPMultiParts.Create(RequestStream,bd); ??for I := 0 to mp.Count-1 do ????begin ?????f:=mp.Parts[i].Headers.ValueFields[‘Content-Disposition‘]; ??????sname:= kbmMWRemoveQuotes( f.ValueByName[‘name‘]); ??????if sname=‘xsxm‘ ??then ?????????begin ?????????xsxm:= ?mp.Parts[i].AsString;; ?????????end; ??????if sname=‘sfzh‘ then ?????????sfzh:=mp.Parts[i].AsString; ??????if sname=‘MyUpload‘ then ??????????begin ????????????fs:= Tfilestream.Create(‘d:\‘+kbmMWRemoveQuotes(f.ValueByName[‘filename‘]) ,fmCreate+fmOpenWrite); ????????????fsize:= mp.Parts[i].Size; ????????????mp.Parts[i].SaveToStream (fs); ????????????fs.Free; ??????????end; ????end; ???result:=‘姓名:‘+xsxm+‘ ?????身份证号:‘+sfzh +‘文件大小:‘+fsize.ToString; ????SetResponseMimeType(‘text/html‘);end;

运行起来。

输入相应的数据,选择一个文件。

点击提交。

浏览器就返回正常信息,同时也在对应目录生成上传的文件。

实现需要的功能。

kbmmw 的HTTPSmartService 上传文件到服务器端

原文地址:https://www.cnblogs.com/xalion/p/9311250.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved