如何用indy10 上传文件
想利用http上传文件,本地一个txt,服务器目录是192.168.1.6/ww/ss,找了很多都是ftp的,跪求答案,小弟分不多了,就剩这么点了
[解决办法]
一定要Indy的吗?
CB目录下有FastNet的http的例子
Borland\CBuilder6\Examples\FastNet\HTTP
[解决办法]
TIdMultiPartFormDataStream *MultiPartFormData=new TIdMultiPartFormDataStream(); MultiPartFormData->AddFormField("upcount","1"); MultiPartFormData->AddFormField("filepath","/download"); MultiPartFormData->AddFile("file1",E->Text,"multipart/form-data"); MultiPartFormData->Position = 0; HTTP->Request->Referer="http://192.168.1.6/ww/ss/upfile.htm"; HTTP->Request->AcceptLanguage="zh-cn"; HTTP->Request->ContentType="multipart/form-data"; HTTP->Request->Connection="Keep-Alive"; TStringStream* stream=new TStringStream(""); try { HTTP->Post("http://192.168.1.6/ww/ss/upfile.asp",MultiPartFormData,stream); } __finally { M->Text=stream->DataString; delete MultiPartFormData;MultiPartFormData=NULL; delete stream;stream=NULL; }
[解决办法]
http协议其实很简单。自己用socket写一个就可以。
POST数据的时候注意下http头里的
Content-Type 和 Content-Length 其他域照搬浏览器的就可以
Content-Type 应该为 multipart/form-data; boundary=---------------------------xxxxxxxxxxxx
Content-Length 是POST 数据的长度
下面是一个比较简单的上传文件的数据包内容
POST /upload.php HTTP/1.1
Host: zmz.test
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 (.NET CLR 3.5.21022)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://zmz.test/upload.html
Content-Type: multipart/form-data; boundary=---------------------------41184676334
Content-Length: 488
-----------------------------41184676334
Content-Disposition: form-data; name="file[]"; filename="upload_File1.txt"
Content-Type: application/octet-stream
1111
-----------------------------41184676334--
////////////////////
http头以\r\n\r\n结尾
边界41184676334 是个随机数
Content-Length 是http后面所有数据的长度。