5,386
社区成员
发帖
与我相关
我的任务
分享
function HttpPostFile(Url, FileField, FileName: string): string;
const
Agent = 'SURE';
MaxLen = 1024 * 100; //在这里定义发送文件最大限制,100K
var
hSession, 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;
begin
result := '';
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_DATA
try
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;