|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
|
2017/2/16 9:51:22 |
标题: |
请教:做一个本地的HTTP服务器用什么组件或者方式比较好? |
浏览:2567 |
|
加入我的收藏 |
楼主: |
我目前用Indy的HttpServer组件来编写,但遇到一个暂时没有办法解决的问题, 就是上传文件到这个HTTPServer,如果文件名包含中文,则会出现乱码。 网上查了一下,这是个indy的遗留问题,据说要到11的版本才会解决。
故在此请教各位大神,此类需求用什么组件或者方式比较好? 先行谢过。
----------------------------------------------
喜欢Delphi,关注Delphi,愿和广大爱好者交朋友。 |
作者: |
|
2017/2/16 9:55:57 |
1楼: |
RTC
----------------------------------------------
!!!!!!!
|
作者: |
|
2017/2/16 17:14:40 |
2楼: |
tms Sparkle
----------------------------------------------
健康快乐每一天
|
作者: |
|
2017/2/16 19:21:02 |
3楼: |
图简单的话用IDHttpServer。 想要能很好控制,也可以直接自己写,Socket监听80端口,处理HTTP协议的请求
----------------------------------------------
武稀松http://www.raysoftware.cn
|
作者: |
|
2017/2/17 13:28:46 |
4楼: |
indy有乱码的,可以将文件名base64处理。。。
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
|
作者: |
|
2017/2/17 14:27:52 |
5楼: |
@wr960204 目前是用Indy的IdHttpServer,但是遇到上传文件是中文的话会有乱码。要处理的话得动源码,而且比较麻烦。自己写也是可以,但就是想偷懒。嘻
@sail2000 文件名base64处理是在哪里处理?上传的时候吗?接收过来就是MIME的编码,文件保存没有问题,但中文文件名会有乱码。
#啥时候盒子才能有@回复提醒功能呢
----------------------------------------------
喜欢Delphi,关注Delphi,愿和广大爱好者交朋友。
|
作者: |
|
2017/2/17 14:51:34 |
6楼: |
文件名只不过是个字符串,indy 他不负责,字符串编码。 你自己编码,然后转 URLEncode。 你服务器端,获取到 URLEncode 的文件名,再转为 字符串。
FTP 文件名都是这样做的。一般用 UTF8 编码。全球通用。
----------------------------------------------
(C)(P)Flying Wang
|
作者: |
|
2017/2/17 18:16:00 |
6楼: |
你用的是哪个版本的Indy,是否可以升级你的Indy,我测试了下用 lazarus Indy 10.6.2 - Berlin RTM 没有乱码问题
----------------------------------------------
-
|
作者: |
|
2017/2/18 15:56:44 |
7楼: |
@wang_80919 我是做一个HTML上传文件的页面来将客户端的文件上传到服务器上来,客户端只是使用简单的浏览器,并没有对客户端的字符串进行编码。
@teclick 用的都是Delphi自带Indy,最新版10.1Berlin。 网上搜索了一下,很多都有这个问题,但没找到解决方案。只能自己debug去改代码,但indy的代码结构不好,总是改不干净。而且会影响其它项目。所以暂时放弃。
----------------------------------------------
喜欢Delphi,关注Delphi,愿和广大爱好者交朋友。
|
作者: |
|
2017/2/18 15:58:39 |
8楼: |
目前在测试使用RTC的HTTP server组件。 如果可以了再和大家分享。
----------------------------------------------
喜欢Delphi,关注Delphi,愿和广大爱好者交朋友。
|
作者: |
|
2017/2/18 21:29:23 |
9楼: |
用了RTC的范例测试,上传带中文名的文件,中文会变成乱码。 看来还得从源头查起原因。不过RTC的编码似乎有规律,不像Indy那样。
----------------------------------------------
喜欢Delphi,关注Delphi,愿和广大爱好者交朋友。
|
作者: |
|
2017/2/18 21:45:18 |
10楼: |
不知道是不是版本问题,我测试的RTC(v6.5.4)竟然解析文件名不是用Unicode。所以导致中文乱码。 估计是为了向前兼容的缘故吧。 该不会要自己处理HTTP的请求吧。 我再测试看看最新版会不会,但最新版没有源码,debug不到问题。
----------------------------------------------
喜欢Delphi,关注Delphi,愿和广大爱好者交朋友。
|
作者: |
|
2017/2/19 13:27:58 |
11楼: |
RTC可用,和版本无关。 解决方法比较简单,放在这边给有需要参考下: 1)网页必须使用UTF-8的编码; 2)获取文件名时加个 utf8Decode 函数即可。
没时间,要不就用这个思路再试试看Indy,不过Indy的编码非常奇怪,不像是UTF8的格式。
----------------------------------------------
喜欢Delphi,关注Delphi,愿和广大爱好者交朋友。
|
作者: |
|
2017/2/20 10:03:37 |
12楼: |
我的测试代码有这句,你加下看看是否可以解决
procedure TForm1.IdHTTPServer1ContextCreated(AContext: TIdContext); begin AContext.Connection.IOHandler.DefAnsiEncoding := IndyTextEncoding_UTF8; end;
----------------------------------------------
-
|
作者: |
|
2017/2/20 11:36:08 |
13楼: |
分享一下你们的代码,谢谢!
----------------------------------------------
-
|
作者: |
|
2017/2/24 10:38:16 |
14楼: |
@teclick 谢谢,我有空试试看。
@iapeng 我用的都是控件的范例。你可自行查看测试。
----------------------------------------------
喜欢Delphi,关注Delphi,愿和广大爱好者交朋友。
|
作者: |
|
2017/2/24 10:39:25 |
15楼: |
示例: http://www.quickburro.org
还支持HTTPS哦: https://www.quickburro.org
----------------------------------------------
樵夫的大马甲
|
作者: |
|
2017/2/24 16:36:10 |
16楼: |
看看 mORMot 里面的这个例子吧,简单而强大:https://github.com/synopse/mORMot/blob/master/SQLite3/Samples/04%20-%20HTTP%20Client-Server/Unit2Static.pas
----------------------------------------------
-
|
|