如何在C ++中将文件发送到浏览器

时间:2010-11-08 12:32:22

标签: c++ windows http file-upload

我需要将文件从我的目录发送给用户。问题文件未发送。 任何人都可以帮助我吗?

我的代码就像:

CHttpServerContext* pCtxt;
// ... there i set headers for open

    DWORD dwRead;
    CString fileName = "c:\txt.doc";

    HANDLE hFile = CreateFile (fileName, GENERIC_READ, FILE_SHARE_READ, 
      (LPSECURITY_ATTRIBUTES) NULL, 
      OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, (HANDLE) NULL);
   if (hFile == INVALID_HANDLE_VALUE)
   {
      return;
   }


   int c = 0;
   CHAR szBuffer [2048];
   do
    {
        if (c++ > 20) {
            break;
            return;
        }
        // read chunk of the file
        if (!ReadFile (hFile, szBuffer, 2048, &dwRead, NULL))
        {
         return;
        }
        if (!dwRead)
         // EOF reached, bail out
         break;

        // Send binary chunk to the browser
        if (!pCtxt->WriteClient( szBuffer, &dwRead, 0))
        {
         return;
        }
    }
    while (1);
    CloseHandle (hFile);
}

2 个答案:

答案 0 :(得分:3)

医生,我生病了。我怎么了?

我的意思是,你几乎没有提供有关发生的事情的信息。

  1. 你知道某个函数是否在代码中返回错误了吗?
  2. 为什么在20次迭代后中止循环?这将您限制为40KB。
  3. 您究竟如何初始化CHttpServerContext
  4. 如果您按原样发送文件,则可以使用高性能TransmitFile功能。
  5. 你的客户是什么?你怎么知道它没有得到文件?

答案 1 :(得分:0)

重新发明轮子没有意义 - 只需使用TransmitFile API - 它内置于CHttpServerContent::TransmitFile()