求一VC的HTTP上传文件的例子,用wininet实现的

flyswift 2008-05-14 12:31:20
rt,解决立马结分。。
谢!!!!
...全文
2322 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiayizanhui 2011-03-10
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 hengai 的回复:]
我也碰到过这个问题,最后终于找到了原因。这里写出来免得以后还有人碰到我这样的情况,希望有人使用了这个方法解决了问题后在下面跟一下。
使用 HTTP PUT 上传,不仅要设置权限,还要把 WEB服务扩展中的 WebDAV 设置为“允许”。
[/Quote]

确实如此 终于解决了 多谢楼上
lanpixiong 2010-12-08
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 hengai 的回复:]
我也碰到过这个问题,最后终于找到了原因。这里写出来免得以后还有人碰到我这样的情况,希望有人使用了这个方法解决了问题后在下面跟一下。
使用 HTTP PUT 上传,不仅要设置权限,还要把 WEB服务扩展中的 WebDAV 设置为“允许”。
[/Quote]
找了半天没找到原因,按兄弟说的方法成功!多谢!
zkj66278006 2010-06-13
  • 打赏
  • 举报
回复
我有个自己写的 HTTP 下载程序要吗? MFC写的
青稞 2010-06-12
  • 打赏
  • 举报
回复
我现在也遇到这个问题了,楼上的各位,你们都解决了么?能告知下方案不?
hengai 2009-06-09
  • 打赏
  • 举报
回复
我也碰到过这个问题,最后终于找到了原因。这里写出来免得以后还有人碰到我这样的情况,希望有人使用了这个方法解决了问题后在下面跟一下。
使用 HTTP PUT 上传,不仅要设置权限,还要把 WEB服务扩展中的 WebDAV 设置为“允许”。
WinEggDrop 2008-11-05
  • 打赏
  • 举报
回复
你的iis要设置能上传文件,并且那个root目录可写才行吧.如果不让写或目录设置了只读不能写权限,自然写不上.
大-海 2008-11-05
  • 打赏
  • 举报
回复
一样
fancylf 2008-09-03
  • 打赏
  • 举报
回复
confZ ,
你可以把你成功的代码贴出来一下么,我也遇到了同楼主相同的问题!谢谢解答!
cofanz 2008-05-16
  • 打赏
  • 举报
回复
我试了一下,是可以的,我用的是windows2000自带的IIS.
flyswift 2008-05-16
  • 打赏
  • 举报
回复
我用PUT也不行,才改成POST的,两种都不行
cofanz 2008-05-15
  • 打赏
  • 举报
回复
HttpOpenRequest (hConnect, "POST",
^^^^
flyswift 2008-05-15
  • 打赏
  • 举报
回复
自己顶一下
scq2099yt 2008-05-14
  • 打赏
  • 举报
回复
up
flyswift 2008-05-14
  • 打赏
  • 举报
回复
BOOL UseHttpSendReqEx(TCHAR *upFile)
{
HINTERNET hSession=NULL, hConnect=NULL, hRequest=NULL;

hSession = InternetOpen(_T("test"),INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0);

hConnect = InternetConnect(hSession,_T("192.168.0.100"), INTERNET_DEFAULT_HTTP_PORT,
NULL,NULL,INTERNET_SERVICE_HTTP,INTERNET_FLAG_NO_CACHE_WRITE,NULL);

INTERNET_BUFFERS BufferIn = {0};
DWORD dwBytesRead;
DWORD dwBytesWritten;
BYTE pBuffer[1024]; // Read from file in 1K chunks
BOOL bRead, bRet;

BufferIn.dwStructSize = sizeof( INTERNET_BUFFERS );

hRequest = HttpOpenRequest (hConnect, "POST",
"/mydirectory/test.txt", NULL, NULL, NULL, 0, 0);
if (!hRequest)
{
printf("Failed to open request handle: %lu\n", GetLastError ());
return FALSE;
}

HANDLE hFile = CreateFile (upFile, GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
printf("\nFailed to open local file %s.", upFile);
return FALSE;
}

BufferIn.dwBufferTotal = GetFileSize (hFile, NULL);
printf ("File size is %d\n", BufferIn.dwBufferTotal );

if(!HttpSendRequestEx( hRequest, &BufferIn, NULL, HSR_INITIATE, 0))
{
printf( "Error on HttpSendRequestEx %lu\n",GetLastError() );
return FALSE;
}

DWORD sum = 0;
do
{
if (!(bRead = ReadFile (hFile, pBuffer, sizeof(pBuffer),
&dwBytesRead, NULL)))
{
printf ("\nReadFile failed on buffer %lu.",GetLastError());
break;
}
if (!(bRet=InternetWriteFile( hRequest, pBuffer, dwBytesRead,
&dwBytesWritten)))
{
printf ("\nInternetWriteFile failed %lu", GetLastError());
break;
}
sum += dwBytesWritten;
}
while (dwBytesRead == sizeof(pBuffer)) ;

CloseHandle (hFile);
printf ("Actual written bytes: %d\n", sum);

if(!HttpEndRequest(hRequest, NULL, 0, 0))
{
printf( "Error on HttpEndRequest %lu \n", GetLastError());
return FALSE;
}
return TRUE;
}

void main()
{
UseHttpSendReqEx("e:\\test.txt");
}

我的代码是这么写的,想把本地的e:\test.txt传到服务器的\mydirectory\test.txt。服务器上有mydirectory这个目录,并且也有写权限。我一步步调度的,函数里都返回true的,但是服务器就是没有存上文件。
flyswift 2008-05-14
  • 打赏
  • 举报
回复
to cofanz:
"/test/page.htm",是表示上传的文件存在test目录下,存成page.htm吧!我已经在服务器上把test目录建好了,但就是存不上文件。
cofanz 2008-05-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 flyswift 的回复:]
cofanz

我按照你给的这个函数来写,最后返回的是成功,但是服务器上怎么没有存上文件呢??
[/Quote]
有可能是虚拟目录不对吧,注意 "/test/page.htm",还有目录的权限问题。
yyunffu 2008-05-14
  • 打赏
  • 举报
回复
关注!
flyswift 2008-05-14
  • 打赏
  • 举报
回复
cofanz

我按照你给的这个函数来写,最后返回的是成功,但是服务器上怎么没有存上文件呢??
Torch009 2008-05-14
  • 打赏
  • 举报
回复
顶楼上
cofanz 2008-05-14
  • 打赏
  • 举报
回复

BOOL UseHttpSendReqEx(HINTERNET hConnect, TCHAR *upFile)
{
INTERNET_BUFFERS BufferIn = {0};
DWORD dwBytesRead;
DWORD dwBytesWritten;
BYTE pBuffer[1024]; // Read from file in 1K chunks
BOOL bRead, bRet;

BufferIn.dwStructSize = sizeof( INTERNET_BUFFERS );

HINTERNET hRequest = HttpOpenRequest (hConnect, "PUT",
"/test/page.htm", NULL, NULL, NULL, 0, 0);
if (!hRequest)
{
printf("Failed to open request handle: %lu\n", GetLastError ());
return FALSE;
}

HANDLE hFile = CreateFile (upFile, GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
printf("\nFailed to open local file %s.", upFile);
return FALSE;
}

BufferIn.dwBufferTotal = GetFileSize (hFile, NULL);
printf ("File size is %d\n", BufferIn.dwBufferTotal );

if(!HttpSendRequestEx( hRequest, &BufferIn, NULL, HSR_INITIATE, 0))
{
printf( "Error on HttpSendRequestEx %lu\n",GetLastError() );
return FALSE;
}

DWORD sum = 0;
do
{
if (!(bRead = ReadFile (hFile, pBuffer, sizeof(pBuffer),
&dwBytesRead, NULL)))
{
printf ("\nReadFile failed on buffer %lu.",GetLastError());
break;
}
if (!(bRet=InternetWriteFile( hRequest, pBuffer, dwBytesRead,
&dwBytesWritten)))
{
printf ("\nInternetWriteFile failed %lu", GetLastError());
break;
}
sum += dwBytesWritten;
}
while (dwBytesRead == sizeof(pBuffer)) ;

CloseHandle (hFile);
printf ("Actual written bytes: %d\n", sum);

if(!HttpEndRequest(hRequest, NULL, 0, 0))
{
printf( "Error on HttpEndRequest %lu \n", GetLastError());
return FALSE;
}
return TRUE;
}

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧