对于文件上传服务器的cgi程序处理都差不多,都会从在某个字典里面存放文件的数据,主要数据就3个:

  • 文件名
  • 文件长度
  • 文件内容

一次可以上传多个文件.RFC1867定义了这个协议 对于页面来说,要想一次上传多个文件,表单里面就得有多个 , 不然只能通过activex或者应用程序的方式来完成

服务器也有一些设定,来限制通过web上传文件,比如说asp.net有4M的限制 编写程序来通过post上传文件,也比较容易,python很简单,有不少现成的代码 delphi也很简单,关键代码如下

var 
	stream: TIdMultiPartFormDataStream; 
	IdHTTP1: TIdHTTP; 
begin 
	stream := TIdMultiPartFormDataStream.Create; 
	stream.AddFile(tag_name, filename,GetMIMETypeFromFile(filename)); 
	IdHTTP1.Post(URL,stream) 
end;

这里面的tag_name就是表单里面的input的name,用来在服务器端区分文件的,当然通过文件名也能够区分.

有一个问题是,indy这个控件TIdMultiPartFormDataStream,用本地编码就把文件名传上去了,对非英文文件名来说,容易出现乱码,很多web程序都采用utf-8的方式来解决这个问题,

要用提交utf-8编码的字符串,必须修改TIdMultiPartFormDataStream类的代码

本文地址: http://lutaf.com/33.htm 鲁塔弗原创文章,欢迎转载,请附带原文链接