WinINet怎样进行HTTP上传、下载文件
http://www.codesky.net/article/200309/4172.html
不知道怎么调用?
[解决办法]
上传文件
- Delphi(Pascal) code
function HttpPostFile(Url, FileField, FileName: string): string;constAgent = 'SURE';MaxLen = 1024 * 100; //在这里定义发送文件最大限制,100KvarhSession, hOpenReq, hConnection: HInternet;SendBuf: array[0..MaxLen - 1] of char;SendLen: DWord;RecBuf: array[0..99] of char;RecLen, dum: DWORD;sHeader: string;UrlHost, UrlFile,Bound: string;beginresult := '';dum := 0;UrlHost := ExtractUrlAddress(Url);UrlFile := ExtractUrlFileName(Url);SendLen := BuildBound(FileField, FileName, @SendBuf[0],Bound);if SendLen < 1 then exit;hSession := InternetOpen(PChar(Agent), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); //INTERNET_FLAG_RAW_DATAtry if hSession = nil then result := 'Error openning internet' else begin hConnection := InternetConnect(hSession, PChar(UrlHost), INTERNET_DEFAULT_HTTP_PORT, nil, nil, INTERNET_SERVICE_HTTP, 0, 0); try if hConnection = nil then result := 'Error openning internet connection' else begin hOpenReq := HTTPOpenRequest(hConnection, 'POST', PChar(UrlFile), 'HTTP/1.1', nil, nil, INTERNET_FLAG_RELOAD, 0); try if hOpenReq = nil then result := 'Error openning internet request' else begin sHeader := 'Host: ' + UrlHost; HttpAddRequestHeaders(hOpenReq, PChar(sHeader), Length(sHeader), HTTP_ADDREQ_FLAG_ADD); sHeader := 'Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*'; HttpAddRequestHeaders(hOpenReq, PChar(sHeader), Length(sHeader), HTTP_ADDREQ_FLAG_ADD); sHeader := 'Accept-Language: en-us'; HttpAddRequestHeaders(hOpenReq, PChar(sHeader), Length(sHeader), HTTP_ADDREQ_FLAG_ADD); sHeader := 'Content-Type: multipart/form-data;boundary='+Bound; HttpAddRequestHeaders(hOpenReq, PChar(sHeader), Length(sHeader), HTTP_ADDREQ_FLAG_ADD); sHeader := 'Accept-Encoding: gzip, deflate'; HttpAddRequestHeaders(hOpenReq, PChar(sHeader), Length(sHeader), HTTP_ADDREQ_FLAG_ADD); sHeader := 'Connection: Keep-Alive'; HttpAddRequestHeaders(hOpenReq, PChar(sHeader), Length(sHeader), HTTP_ADDREQ_FLAG_ADD); sHeader := 'Cache-Control: no-cache'; HttpAddRequestHeaders(hOpenReq, PChar(sHeader), Length(sHeader), HTTP_ADDREQ_FLAG_ADD); HTTPSendRequest(hOpenReq, nil, 0, @SendBuf, SendLen); RecLen := SizeOf(RecBuf); HTTPQueryInfo(hOpenReq, HTTP_QUERY_STATUS_TEXT, @RecBuf, RecLen, dum); result := string(RecBuf); end; finally InternetCloseHandle(hOpenReq); end; end; finally InternetCloseHandle(hConnection); end; end;finally InternetCloseHandle(hSession);end;end;