Re: Uploading Binary files to HTTPS
- From: "Chizl" <Chizl@xxxxxxxxxxxxxx>
- Date: Tue, 12 Feb 2008 17:10:56 -0600
"Igor Tandetnik" <itandetnik@xxxxxxxx> wrote in message
news:OJB4LOcbIHA.4196@xxxxxxxxxxxxxxxxxxxxxxx
Show the code where you call IWinHttpRequest::Send. My guess is, you are
doing something that causes the content to be terminated by the first zero
byte, e.g. handling a BSTR carelessly.
Ok, I posted the code at the bottom.. I got it to a point it doesn't cut
off the file content, however it's as if the web server or the ASPUpload
doesn't know what to do with it.. I cut out a lot of the content below,
because it's binary, but left the header and what's wrapped around the
binary file.. Does this data look right?
--------------------------------------
POST /DER/upload.asp HTTP/1.1
Cache-Control: no-cache
Content-Type: multipart/form-data; boundary=Xu02=$; Charset=UTF-8
Content-Length: 2249
Accept: */*
User-Agent: Mozilla/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)
Host: 209.163.160.61:5000
Connection: Keep-Alive
--Xu02=$
Content-Type: application/octet-stream
Content-Disposition: multipart/form-data; name="PostData";
filename="1234567890.zip"
Content-Length: 1234
PKzX)????iI/F@
Q??????(}lxsPK
--Xu02=$
--------------------------------------
Code:
--------------------------------------
ifstream infile (szFileName.c_str(), ios::in|ios::binary);
if(!infile)
{
if (pIWinHttpRequest) {
pIWinHttpRequest->Release();
pIWinHttpRequest = NULL;
}
*sContents = "ERROR: No file found to upload";
} else {
//get file size
struct _stat buf;
_stat(szFileName.c_str(), &buf);
int iFileSize = buf.st_size;
char pHeaderInfo[1024] = {0};
sprintf(pHeaderInfo, "%d", iFileSize);
//declare
int iHeaderSize = 0;
char* pszFile = (char*)szFileName.c_str();
string szHeader = "";
char* strInput = new char[MAX_READ];
//get file name from file passed in
int iSize = szFileName.length();
int iLoc = szFileName.find_last_of("\\")+1;
iSize -= iLoc;
memcpy(pszFile, &pszFile[iLoc], iSize);
pszFile[iSize]=0;
//create the header
szHeader.append("--Xu02=$\r\n");
szHeader.append("Content-Type: application/octet-stream\r\n");
szHeader.append("Content-Disposition: multipart/form-data;
name=\"PostData\"; filename=\"");
szHeader.append(pszFile);
szHeader.append("\"\r\n");
szHeader.append("Content-Length: ");
szHeader.append(pHeaderInfo);
szHeader.append("\r\n\r\n");
CComBSTR bstrBody = SysAllocString(T2OLE(szHeader.c_str()));
//load file into array
while(!infile.eof())
{
memset(strInput, 0, MAX_READ);
infile.read(strInput, MAX_READ);
unsigned int iBytesRead = 0;
iBytesRead = infile.gcount();
bstrBody.Append(strInput);
}
bstrBody.Append("\r\n\r\n--Xu02=$\r\n");
//close file
infile.close();
//copy to a format Send understands
_bstr_t bBody = bstrBody;
//send data
hr = pIWinHttpRequest->Send(bBody);
delete[] strInput;
}
--------------------------------------
.
- Follow-Ups:
- Re: Uploading Binary files to HTTPS
- From: Ben Voigt [C++ MVP]
- Re: Uploading Binary files to HTTPS
- From: Igor Tandetnik
- Re: Uploading Binary files to HTTPS
- References:
- Uploading Binary files to HTTPS
- From: Chizl
- Re: Uploading Binary files to HTTPS
- From: Igor Tandetnik
- Uploading Binary files to HTTPS
- Prev by Date: Re: C2440 error in VS .net 2003
- Next by Date: Re: How to make a full-screen app
- Previous by thread: Re: Uploading Binary files to HTTPS
- Next by thread: Re: Uploading Binary files to HTTPS
- Index(es):
Relevant Pages
|
Loading