kbmmw 的HTTPSmartService 上传文件到服务器端
前面我写过了 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[],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 := to mp.Count- 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 上传文件到服务器端的更多相关文章
- WebClient 上传文件 上传文件到服务器端
一直对于上传文件到服务器端困惑:以前,现在,学到了关于WebClient的post知识 瞬间对于上传文件到服务器觉得好轻松: 原理很简单:我们通过post服务器的页面:把本地的文件直接传递过去: 现在 ...
- OkHttp上传文件,服务器端请求解析找不到文件信息的问题
长话短说,不深入解释了,官方给的上传案例代码: private static final String IMGUR_CLIENT_ID = "..."; private stati ...
- 那些年的 网络通信之 TCP/IP 传输控制协议 ip 加 端口 客户端上传文件到服务器端服务器端返回上传成功消息
多线程开启, 客户端通过 Socket 流 上传文件到服务端的一个小程序练习. 1. 抓住阻塞式方法,去调试 2. 获取对应流对象操作对应的对象 这时候自己不能懵,一定要清晰,最好命名就能区别,一搞混 ...
- 关于FileZilla上传文件后服务器端文件与本地文件大小不一致的解决方法
最近在调试网站时发现,通过ftp上传工具FileZilla上传至服务器端的文件与本地文件大小不一致,虽然没有影响网站的最终显示效果,但仍让我困惑不解.后发现是传输类型的原因,解决方法如下: 中文版Fi ...
- 上传文件到服务器端后进一步推送到sftp服务器
扩展安装 要想sftp服务端发送文件,就需要php脚本具有作为ssh客户端的能力,所以需先为php安装如下扩展 openssl openssl-dev libssh php ssh 扩展 按照下面的命 ...
- 客户端(Winform窗体)上传文件到服务器(web窗体)简单例子
客户端:先创建一个winform窗体的应用程序项目 项目结构
- Android 上传文件,图片。以及服务器端接收相关。
前面一篇文章写了实现照相功能的一个例子,其实那个实现效果是个略缩图.要查看全图就要先指定照片的存放路径.以后我会修改那个文章.今天先说下图片,文件等上传的实现.接着拿照片说事,光照完了不行还得往服务器 ...
- node.js服务器端下载、上传文件
使用request 下载文件: 安装依赖: npm i requestsourceUrl下载源,targetUrl保存路径 async function downLoadFile(sourceUrl, ...
- 鸿蒙的js开发部模式18:鸿蒙的文件上传到python服务器端
1.首先鸿蒙的js文件上传,设置目录路径为: 构建路径在工程主目录下: 该目录的说明见下面描述: 视图构建如下: 界面代码: <div class="container"&g ...
随机推荐
- eclipse中没有tomcat小猫
安装了tomcat,按网上的说明也使用了tomcatPluginV331 配置文件,还是没有小猫,后来我发现,网上的tomcatPluginV331 针对eclipse 4.4版本,所以应该是插件的版 ...
- 2019年华南理工大学程序设计竞赛(春季赛)-C-六学家的困惑
题目链接:https://ac.nowcoder.com/acm/contest/625/C 题意:给定两个字符串,每次只能从两个字符串的两端取字符,求依次取字符后所构成的数字最大为多少. 思路:思路 ...
- axaj 的回调
//为了动态生成表格获取数据用ajax获取servlet回调数据 <script> $.ajax({ url = "servlet地址", type : "p ...
- 2018年全国多校算法寒假训练营练习比赛(第四场)B:道路建设
传送门:https://www.nowcoder.net/acm/contest/76/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 65536K,其他语言131072K 64b ...
- 学习Auxre记录
1.下载地址:https://www.axure.com.cn/3510/(可以免费试用30天) 2.视频教程:https://huke88.com/course/6455.html 3.文字教程:h ...
- ActiveMQ之java Api
ActiveMQ 安全机制 activemq的web管理界面:http://127.0.0.1:8161/admin activemq管控台使用jetty部署,所以需要修改密码则需要修改相应的配置文件 ...
- css3动画:执行前不显示,执行后显示
今天做一个轮播,轮播图上使用animation.需求是当滚动到当前图片时,图片中的div从无到有逐渐显示, 遇到的问题是:页面刷新时,此图片上的div可以从无到有,但第二次滚动到此图片时,总是先显示一 ...
- 21 pythone【入门指南】:string
string是很基础的数据结构,来看看string有哪些常用的操作. #!/bin/python #!---encoding: UTF- s = 'abcdefg' #concat s1 = s + ...
- 不通过调用__Init__来创建实例
老样子,抛出个问题,我们想要创建一个实例,但是由于某些原因想绕过__init__方法,用别的方式来进行创建. 举个栗子 小贱贱反序列化数据,或者说实现一个类方法将其作为备选的构造函数,都属于这种情况. ...
- position的absolute与fixed,absolute与relative共同点与不同点
absolute与fixed 共同点: (1) 改变行内元素的呈现方式,display被置为block: (2) 让元素脱离普通流,不占据空间: (3) 默认会覆盖到非定位元素上 不同点: absol ...