как в C ++ отправить файл в браузер - PullRequest
0 голосов
/ 08 ноября 2010

Мне нужно отправить файл из моего каталога пользователю.Файл проблемы не был отправлен.Может ли кто-нибудь мне помочь?

Мой код похож на:

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 ]

3 голосов
/ 08 ноября 2010

Доктор, я болен. Что со мной не так?

Я имею в виду, вы почти не даете информации о том, что произошло.

  1. Знаете ли вы, если какая-то функция вернула вам ошибку в вашем коде?
  2. Почему вы прерываете цикл после 20 итераций? Это ограничивает вас до 40 КБ.
  3. Как именно вы инициализируете CHttpServerContext?
  4. Вы можете использовать высокопроизводительную функцию TransmitFile, если просто отправляете файл как есть.
  5. Кто ваш клиент? Откуда ты знаешь, что он не получил файл?
0 голосов
/ 08 ноября 2010

Нет смысла заново изобретать колесо - просто используйте API TransmitFile - оно встроено в CHttpServerContent :: TransmitFile () .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...