18 #ifndef NAF_FILES_FILEMANAGER
19 #define NAF_FILES_FILEMANAGER
23 #include <string_view>
32 #include "Poco/Path.h"
33 #include "Poco/File.h"
35 #include "Poco/DateTime.h"
36 #include "Poco/Random.h"
37 #include "Poco/StreamCopier.h"
38 #include "Poco/Net/HTMLForm.h"
39 #include "Poco/Net/PartHandler.h"
40 #include "Poco/Net/MessageHeader.h"
41 #include "Poco/CountingStream.h"
42 #include <Poco/JSON/JSON.h>
43 #include <Poco/JSON/JSONException.h>
44 #include <Poco/JSON/Array.h>
45 #include <Poco/JSON/Object.h>
47 #include "files/file_properties.h"
48 #include "files/file.h"
49 #include "tools/settings_manager.h"
50 #include "tools/output_logger.h"
57 enum class OperationType;
64 using namespace Poco::Net;
67 enum class NAF::Files::OperationType
78 using Ptr = std::shared_ptr<FileManager>;
85 std::map<std::string, Files::FileProperties>& get_supported_files()
87 auto& var = supported_files_;
90 OperationType get_operation_type()
const{
return operation_type_;}
91 std::string get_directory_base()
const{
return directory_base_;}
92 std::string get_directory_for_temp_files()
const{
return directory_for_temp_files_;}
93 JSON::Object::Ptr& get_result()
98 std::vector<Files::File>& get_files()
104 void set_operation_type(OperationType operation_type){operation_type_ = operation_type;}
105 void set_directory_base(std::string directory_base) { directory_base_ = directory_base;}
106 void set_directory_for_temp_files(std::string directory_for_temp_files) { directory_for_temp_files_ = directory_for_temp_files;}
108 void handlePart(
const MessageHeader& header, std::istream& stream)
override;
109 std::string GenerateName_(std::string name);
114 void DownloadFile_(std::ostream& out_response);
118 void AddBasicSupportedFiles_();
120 Files::File CreateTempFileFromAddress_(std::string address);
121 void ProcessContentLength_();
122 bool VerifyMaxFileSize_();
123 bool ChangePathAndFilename_(
Files::File& file, std::string directory,
bool change_filename =
true);
127 void ProcessFileType_();
128 std::string SplitHeaderValue_(
const MessageHeader& header, std::string header_name, std::string parameter);
129 std::size_t ReplaceText_(std::string& inout, std::string what, std::string with);
132 std::map<std::string, Files::FileProperties> supported_files_;
133 OperationType operation_type_;
134 std::string directory_base_;
135 std::string directory_for_temp_files_;
136 JSON::Object::Ptr result_;
137 std::vector<Files::File> files_;
Definition: file_manager.h:76
Definition: file_properties.h:36