C++Builder XE2如何通过IDHTTP的POST方法上传文件?
DEPHI的代码如下:
var
MultiPartFormDataStream: TMsMultiPartFormDataStream;
idhttp1:TIdHTTP;
begin
MultiPartFormDataStream := TMsMultiPartFormDataStream.Create;
try
idhttp1:=Tidhttp.Create(nil);
IdHTTP1.ProtocolVersion:=pv1_1;
IdHTTP1.HandleRedirects := True;
IdHTTP1.Request.UserAgent:='Klive';
IdHTTP1.Request.Connection:='Keep-Alive';
IdHTTP1.HTTPOptions:=IdHTTP1.HTTPOptions+[hoKeepOrigProtocol];
IdHttp1.Request.ContentType := MultiPartFormDataStream.RequestContentType;
MultiPartFormDataStream.AddFormField('name', 'file');
MultiPartFormDataStream.AddFormField('filename', Path);
MultiPartFormDataStream.AddFile('file', filename, 'testmime');
MultiPartFormDataStream.PrepareStreamForDispatch;
MultiPartFormDataStream.Position := 0;
try
Result:=pchar(idhttp1.Post(str,MultiPartFormDataStream));
except
on e: EIdHTTPProtocolException do
begin
result:= pchar(e.ErrorMessage);// Application.MessageBox(PChar(e.ErrorMessage), 'ERROR', MB_OK + MB_ICONSTOP);
end;
end;
finally
MultiPartFormDataStream.Free;
这个代码是金山快盘上传文件的实现代码,具体要求是这样的:
http://www.kuaipan.cn/developers/document_apiupload.ht
POST /cdlnode/1/fileops/upload_file?oauth_nonce=57895862&oauth_timestamp=1328956550&oauth_consumer_key=xcKXXgo9AkXdJuBn&oauth_signature_method=HMAC-SHA1&oauth_version=1.0&oauth_token=fe6265afa5c74866a62573b34ca411fb&oauth_signature=eQ9BhjCaIpUAWDD3cbb%2BrtlfXt4%3D&path=%2Fttt1328956550.95sss%2Ftestw.wps&root=app_folder&overwrite=True HTTP/1.1
Accept-Encoding: identity
Content-Length: 237
Host: ufaclient.wps.cn
Content-Type: multipart/form-data; boundary=----------ThIs_Is_tHe_bouNdaRY_$
Connection: close
User-Agent: klive
------------ThIs_Is_tHe_bouNdaRY_$
Content-Disposition: form-data; name="file"; filename="testw.wps"
Content-Type: application/octet-stream
1328956550.991328956550.991328956550.991328956550.99
------------ThIs_Is_tHe_bouNdaRY_$--
在C++Builder里面没TMsMultiPartFormDataStream这个类,我的问题是:
1)用TMemoryStream如何实现?
2)POST上传文件怎么通过表单实现?
c++builder 金山
[解决办法]
bcb的优点是可以直接调用delphi单元,
把delphi部分做成函数,然后在bcb把它加栽进来
直接调用其函数就行了,呵呵
[解决办法]
不会没有把,xe2应该还是indy10的版本,变化不大。
[解决办法]
TMsMultiPartFormDataStream 是一个自定义类吧?
http://hi.baidu.com/hoctdhppxtbkrvq/item/7f0bfcb2606050a6eaba939c