added: setting a correct mime type for static files - using magic library

added: std::wstring file_mime_type to ItemContent - a mime type for static file
added: Header (core/header.h) - there will be header names defined, at the moment only content_type
added: FuncionsBase::Finish() - it is called at the end when the winix finishes
This commit is contained in:
2021-09-22 00:23:25 +02:00
parent 26ed7b80be
commit 9c5c74ba84
29 changed files with 364 additions and 35 deletions

View File

@@ -62,6 +62,12 @@ void Upload::Init()
}
void Upload::Finish()
{
CloseMagicLib();
}
bool Upload::HasAccess(const Item & item)
{
// you can use 'upload' only in a directory
@@ -229,6 +235,7 @@ void Upload::UploadMulti()
cur->request->item.item_content.file_size = i->second.file_size;
functions->PrepareUrl(cur->request->item);
AnalizeFileType(i->second.tmp_filename, cur->request->item.item_content.file_mime_type);
UploadFile(cur->request->item, i->second.tmp_filename);
i->second.tmp_filename.clear();
}
@@ -268,6 +275,7 @@ void Upload::UploadSingle()
functions->PrepareUrl(cur->request->item);
}
AnalizeFileType(post_file.tmp_filename, cur->request->item.item_content.file_mime_type);
UploadFile(cur->request->item, post_file.tmp_filename);
post_file.tmp_filename.clear();
@@ -279,10 +287,89 @@ void Upload::UploadSingle()
}
void Upload::InitMagicLibIfNeeded()
{
if( !magic_cookie )
{
log << log3 << "Upload: loading magic library" << logend;
magic_cookie = magic_open(MAGIC_MIME_TYPE);
if( magic_cookie )
{
if( magic_load(magic_cookie, nullptr) < 0 )
{
log << log1 << "Upload: I cannot load the magic file, magic_load failed";
const char * err = magic_error(magic_cookie);
if( err )
{
log << ", error: " << err;
}
log << logend;
CloseMagicLib();
}
}
else
{
log << log1 << "Upload: I cannot initialize magic library, magic_open failed" << logend;
}
}
}
void Upload::CloseMagicLib()
{
if( magic_cookie )
{
log << log3 << "Upload: closing magic library" << logend;
magic_close(magic_cookie);
magic_cookie = nullptr;
}
}
void Upload::AnalizeFileType(const std::wstring & file_path, std::wstring & file_type)
{
file_type.clear();
if( magic_cookie )
{
std::string file;
pt::wide_to_utf8(file_path, file);
log << log3 << "Upload: analize file: " << file;
const char * magic_file_type = magic_file(magic_cookie, file.c_str());
if( magic_file_type )
{
log << ", mime type is: " << magic_file_type << logend;
pt::utf8_to_wide(magic_file_type, file_type);
}
else
{
log << logend << log1 << "Upload: I cannot analize file: " << file << ", magic_file failed";
const char * err = magic_error(magic_cookie);
if( err )
{
log << ", error: " << err;
}
log << logend;
}
}
else
{
log << log1 << "Upload: magic library not initialized" << logend;
}
}
void Upload::MakePost()
{
InitMagicLibIfNeeded();
cur->request->item_tab.clear();
is_jquery_upload = cur->request->IsParam(L"jquery_upload");
@@ -299,6 +386,7 @@ void Upload::MakePost()
UploadMulti();
else
UploadSingle();
}