添加http文件服务可挂载物理目录,新增ENABLE_API_STATIC_LIB

sa
This commit is contained in:
baiyfcu 2021-08-25 14:30:31 +08:00
parent 4a063bee43
commit 626bf3dcf9
5 changed files with 29 additions and 5 deletions

View File

@ -57,6 +57,7 @@ option(ENABLE_ASAN "Enable Address Sanitize" false)
option(ENABLE_WEBRTC "Enable WebRTC" false) option(ENABLE_WEBRTC "Enable WebRTC" false)
option(ENABLE_PLAYER "Enable Player" true) option(ENABLE_PLAYER "Enable Player" true)
option(ENABLE_MSVC_MT "Enable MSVC Mt/Mtd lib" true) option(ENABLE_MSVC_MT "Enable MSVC Mt/Mtd lib" true)
option(ENABLE_API_STATIC_LIB "Enable mk_api static lib" false)
if (MSVC AND ENABLE_MSVC_MT) if (MSVC AND ENABLE_MSVC_MT)
set(CompilerFlags set(CompilerFlags

View File

@ -2,13 +2,11 @@
file(GLOB api_src_list include/*.h source/*.cpp source/*.h source/*.c) file(GLOB api_src_list include/*.h source/*.cpp source/*.h source/*.c)
set(ENABLE_API_STATIC false)
if (IOS) if (IOS)
add_library(mk_api STATIC ${api_src_list}) add_library(mk_api STATIC ${api_src_list})
target_link_libraries(mk_api ${LINK_LIB_LIST}) target_link_libraries(mk_api ${LINK_LIB_LIST})
else () else ()
if(ENABLE_API_STATIC) if(ENABLE_API_STATIC_LIB)
add_library(mk_api STATIC ${api_src_list}) add_library(mk_api STATIC ${api_src_list})
if (WIN32) if (WIN32)
add_definitions(-DMediaKitApi_STATIC) add_definitions(-DMediaKitApi_STATIC)

View File

@ -112,6 +112,8 @@ const string kKeepAliveSecond = HTTP_FIELD"keepAliveSecond";
const string kCharSet = HTTP_FIELD"charSet"; const string kCharSet = HTTP_FIELD"charSet";
//http 服务器根目录 //http 服务器根目录
const string kRootPath = HTTP_FIELD"rootPath"; const string kRootPath = HTTP_FIELD"rootPath";
//http 服务器虚拟目录
const string kVirtualPath = HTTP_FIELD "virtualPath";
//http 404错误提示内容 //http 404错误提示内容
const string kNotFound = HTTP_FIELD"notFound"; const string kNotFound = HTTP_FIELD"notFound";
//是否显示文件夹菜单 //是否显示文件夹菜单

View File

@ -183,6 +183,8 @@ extern const string kKeepAliveSecond;
extern const string kCharSet; extern const string kCharSet;
//http 服务器根目录 //http 服务器根目录
extern const string kRootPath; extern const string kRootPath;
//http 服务器虚拟目录 虚拟目录名和磁盘物理路径使用“,”隔开,多个配置路径间用 "|"隔开,例如 path1,d:/record|path2,e:/record
extern const string kVirtualPath;
//http 404错误提示内容 //http 404错误提示内容
extern const string kNotFound; extern const string kNotFound;
//是否显示文件夹菜单 //是否显示文件夹菜单

View File

@ -18,6 +18,7 @@
#include "HttpConst.h" #include "HttpConst.h"
#include "HttpSession.h" #include "HttpSession.h"
#include "Record/HlsMediaSource.h" #include "Record/HlsMediaSource.h"
#include "Common/Parser.h"
namespace mediakit { namespace mediakit {
@ -131,6 +132,15 @@ static bool makeFolderMenu(const string &httpPath, const string &strFullPath, st
} }
setFile.emplace(pDirent->d_name); setFile.emplace(pDirent->d_name);
} }
//如果是root目录添加虚拟目录
if (httpPath == "/") {
GET_CONFIG(string, virtualPath, Http::kVirtualPath);
mediakit::Parser pathParser;
StrCaseMap args = pathParser.parseArgs(virtualPath, "|", ",");
for (auto arg : args) {
setFile.emplace(arg.first);
}
}
int i = 0; int i = 0;
for (auto &strFile :setFile) { for (auto &strFile :setFile) {
string strAbsolutePath = strPathPrefix + "/" + strFile; string strAbsolutePath = strPathPrefix + "/" + strFile;
@ -138,7 +148,7 @@ static bool makeFolderMenu(const string &httpPath, const string &strFullPath, st
ss << "<li><span>" << i++ << "</span>\t"; ss << "<li><span>" << i++ << "</span>\t";
ss << "<a href=\""; ss << "<a href=\"";
if (!last_dir_name.empty()) { if (!last_dir_name.empty()) {
ss << last_dir_name << "/" << strFile; ss << httpPath << "/" << strFile;
} else { } else {
ss << strFile; ss << strFile;
} }
@ -461,7 +471,18 @@ static void accessFile(TcpSession &sender, const Parser &parser, const MediaInfo
static string getFilePath(const Parser &parser,const MediaInfo &mediaInfo, TcpSession &sender){ static string getFilePath(const Parser &parser,const MediaInfo &mediaInfo, TcpSession &sender){
GET_CONFIG(bool, enableVhost, General::kEnableVhost); GET_CONFIG(bool, enableVhost, General::kEnableVhost);
GET_CONFIG(string, rootPath, Http::kRootPath); GET_CONFIG(string, rootPath, Http::kRootPath);
auto ret = File::absolutePath(enableVhost ? mediaInfo._vhost + parser.Url() : parser.Url(), rootPath); GET_CONFIG(string, virtualPath, Http::kVirtualPath);
mediakit::Parser pathParser;
StrCaseMap args = pathParser.parseArgs(virtualPath, "|", ",");
auto path = args[mediaInfo._app];
string ret;
if (path == "") {
ret = File::absolutePath(
enableVhost ? mediaInfo._vhost + parser.Url() : parser.Url(), rootPath);
}else {
ret = File::absolutePath(
enableVhost ? mediaInfo._vhost + "/" + mediaInfo._streamid : mediaInfo._streamid, path);
}
NoticeCenter::Instance().emitEvent(Broadcast::kBroadcastHttpBeforeAccess, parser, ret, static_cast<SockInfo &>(sender)); NoticeCenter::Instance().emitEvent(Broadcast::kBroadcastHttpBeforeAccess, parser, ret, static_cast<SockInfo &>(sender));
return ret; return ret;
} }