DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: pixelcraft
今日帖子: 44
在线用户: 21
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 chonghai (DBlue) ★☆☆☆☆ -
盒子活跃会员
2017/2/16 9:51:22
标题:
请教:做一个本地的HTTP服务器用什么组件或者方式比较好? 浏览:2554
加入我的收藏
楼主: 我目前用Indy的HttpServer组件来编写,但遇到一个暂时没有办法解决的问题,
就是上传文件到这个HTTPServer,如果文件名包含中文,则会出现乱码。
网上查了一下,这是个indy的遗留问题,据说要到11的版本才会解决。

故在此请教各位大神,此类需求用什么组件或者方式比较好?
先行谢过。
----------------------------------------------
喜欢Delphi,关注Delphi,愿和广大爱好者交朋友。
作者:
男 2010632 (嘎嘎) ★☆☆☆☆ -
普通会员
2017/2/16 9:55:57
1楼: RTC
----------------------------------------------
!!!!!!!
作者:
女 sinagirl (雪亮) ★☆☆☆☆ -
盒子活跃会员
2017/2/16 17:14:40
2楼: tms Sparkle
----------------------------------------------
健康快乐每一天
作者:
男 wr960204 (武稀松) ★☆☆☆☆ -
盒子活跃会员
2017/2/16 19:21:02
3楼: 图简单的话用IDHttpServer。
想要能很好控制,也可以直接自己写,Socket监听80端口,处理HTTP协议的请求
----------------------------------------------
武稀松http://www.raysoftware.cn
作者:
男 sail2000 (小帆工作室) ★☆☆☆☆ -
盒子活跃会员
2017/2/17 13:28:46
4楼: indy有乱码的,可以将文件名base64处理。。。
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
作者:
男 chonghai (DBlue) ★☆☆☆☆ -
盒子活跃会员
2017/2/17 14:27:52
5楼: @wr960204
目前是用Indy的IdHttpServer,但是遇到上传文件是中文的话会有乱码。要处理的话得动源码,而且比较麻烦。自己写也是可以,但就是想偷懒。嘻

@sail2000 
文件名base64处理是在哪里处理?上传的时候吗?接收过来就是MIME的编码,文件保存没有问题,但中文文件名会有乱码。

#啥时候盒子才能有@回复提醒功能呢
----------------------------------------------
喜欢Delphi,关注Delphi,愿和广大爱好者交朋友。
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2017/2/17 14:51:34
6楼: 文件名只不过是个字符串,indy 他不负责,字符串编码。
你自己编码,然后转 URLEncode。
你服务器端,获取到 URLEncode 的文件名,再转为 字符串。

FTP 文件名都是这样做的。一般用 UTF8 编码。全球通用。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 teclick (nelson) ★☆☆☆☆ -
普通会员
2017/2/17 18:16:00
6楼: 你用的是哪个版本的Indy,是否可以升级你的Indy,我测试了下用 lazarus Indy 10.6.2 - Berlin RTM 没有乱码问题
----------------------------------------------
-
作者:
男 chonghai (DBlue) ★☆☆☆☆ -
盒子活跃会员
2017/2/18 15:56:44
7楼: @wang_80919
我是做一个HTML上传文件的页面来将客户端的文件上传到服务器上来,客户端只是使用简单的浏览器,并没有对客户端的字符串进行编码。

@teclick
用的都是Delphi自带Indy,最新版10.1Berlin。
网上搜索了一下,很多都有这个问题,但没找到解决方案。只能自己debug去改代码,但indy的代码结构不好,总是改不干净。而且会影响其它项目。所以暂时放弃。
----------------------------------------------
喜欢Delphi,关注Delphi,愿和广大爱好者交朋友。
作者:
男 chonghai (DBlue) ★☆☆☆☆ -
盒子活跃会员
2017/2/18 15:58:39
8楼: 目前在测试使用RTC的HTTP server组件。
如果可以了再和大家分享。
----------------------------------------------
喜欢Delphi,关注Delphi,愿和广大爱好者交朋友。
作者:
男 chonghai (DBlue) ★☆☆☆☆ -
盒子活跃会员
2017/2/18 21:29:23
9楼: 用了RTC的范例测试,上传带中文名的文件,中文会变成乱码。
看来还得从源头查起原因。不过RTC的编码似乎有规律,不像Indy那样。
----------------------------------------------
喜欢Delphi,关注Delphi,愿和广大爱好者交朋友。
作者:
男 chonghai (DBlue) ★☆☆☆☆ -
盒子活跃会员
2017/2/18 21:45:18
10楼: 不知道是不是版本问题,我测试的RTC(v6.5.4)竟然解析文件名不是用Unicode。所以导致中文乱码。
估计是为了向前兼容的缘故吧。
该不会要自己处理HTTP的请求吧。
我再测试看看最新版会不会,但最新版没有源码,debug不到问题。
----------------------------------------------
喜欢Delphi,关注Delphi,愿和广大爱好者交朋友。
作者:
男 chonghai (DBlue) ★☆☆☆☆ -
盒子活跃会员
2017/2/19 13:27:58
11楼: RTC可用,和版本无关。
解决方法比较简单,放在这边给有需要参考下:
1)网页必须使用UTF-8的编码;
2)获取文件名时加个 utf8Decode 函数即可。

没时间,要不就用这个思路再试试看Indy,不过Indy的编码非常奇怪,不像是UTF8的格式。
----------------------------------------------
喜欢Delphi,关注Delphi,愿和广大爱好者交朋友。
作者:
男 teclick (nelson) ★☆☆☆☆ -
普通会员
2017/2/20 10:03:37
12楼: 我的测试代码有这句,你加下看看是否可以解决

procedure TForm1.IdHTTPServer1ContextCreated(AContext: TIdContext);
begin
  AContext.Connection.IOHandler.DefAnsiEncoding := IndyTextEncoding_UTF8;
end;
----------------------------------------------
-
作者:
男 iapeng (iapeng) ▲▲▲▲△ -
普通会员
2017/2/20 11:36:08
13楼: 分享一下你们的代码,谢谢!
----------------------------------------------
-
作者:
男 chonghai (DBlue) ★☆☆☆☆ -
盒子活跃会员
2017/2/24 10:38:16
14楼: @teclick 谢谢,我有空试试看。

@iapeng 我用的都是控件的范例。你可自行查看测试。
----------------------------------------------
喜欢Delphi,关注Delphi,愿和广大爱好者交朋友。
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
2017/2/24 10:39:25
15楼: 示例:
http://www.quickburro.org

还支持HTTPS哦:
https://www.quickburro.org
----------------------------------------------
樵夫的大马甲
作者:
男 edwinyeah (Edwin) ★☆☆☆☆ -
盒子活跃会员
2017/2/24 16:36:10
16楼: 看看 mORMot 里面的这个例子吧,简单而强大:https://github.com/synopse/mORMot/blob/master/SQLite3/Samples/04%20-%20HTTP%20Client-Server/Unit2Static.pas
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行148.4375毫秒 RSS