2016-06-15 6 views
-2

Я хочу загрузить и загрузить файл m3u8, который находится на серверной машине. Я использую следующий код для чтения и отправки файла m3u8 на веб-сервер. Браузер отображает содержимое файла вместо его загрузки. Поэтому, пожалуйста, дайте мне знать, как загрузить его. Веб-браузерКак я могу экспортировать данные в файл m3u8?

if ((exportHandle = fopen(v3FileName, "a+")) != NULL) { 
    long end = 0, start = 0, pos = 0; 
    char* m3u8FileDataBuff = NULL; 
    fseek(exportHandle, 0, SEEK_END); 
    end = ftell(exportHandle); 
    fseek(exportHandle, 0, SEEK_SET); 
    start = ftell(exportHandle); 
    pos = end - start; 
    m3u8FileDataBuff = (char *) malloc(pos); 
    end = 0; 
    start = 0; 
    fread(m3u8FileDataBuff, 1, pos, exportHandle); 
    pClienCommunication->writeBuffer(m3u8FileDataBuff, pos); 
    free(m3u8FileDataBuff); 
    fclose(exportHandle); 
} 

ответ

0

клиента отображает содержимое, так как MIME тип ответа либо ноль, либо что-то вроде «текст/обычный». Правильно настройте заголовок ответа http, чтобы указать тип mime файла m3u8 (application/x-mpegURL или vnd.apple.mpegURL).

Кусок кода, который вы предоставили, похоже, не устанавливает ничего вокруг заголовка ответа, просто содержимое.

Проверьте доступный API pClienCommunication-> или укажите, где это происходит, каковы ваши варианты настройки заголовка ответа.

Возможно, это возможно с помощью некоторого правила, настроенного на веб-сервере, обслуживающем ответ, для установки типа MIME для определенных URL-адресов или на основе содержимого ответа (но применение таких правил на веб-сервере уровень обычно более дорогостоящий, а затем корректировка ответа при создании в части C++).


И почему этот помеченный C++, когда сам код C-like со всеми его проблемами. В современном C++ вы никогда не делаете такие вещи, как «fclose (..)», потому что это делается в деструкторе класса оболочки файла, поэтому вы не рискуете, что fclose будет пропущен в случае какого-либо исключения, вызванного в fread и т. Д. .

Таким образом, в современном C++ эти вещи должны выглядеть примерно так:

{ 
    SomeFileClass exportFile(v3FileName, "a+"); 
    if (exportFile.isOK()) { 
     SomeFileContentBuffer data = exportFile.read(); 
     pClienCommunication->writeBuffer(data.asCharPtr(), data.size()); 
    } 
} 

Таким образом, вы не можете забыть выпустить любой дескриптор файла или буфера памяти (как деструкторов отдельных вспомогательных классов будет обращаться с этим).

Смежные вопросы