acl
3.5.3.0
http_mime.hpp
浏览该文件的文档.
1
#pragma once
2
#include "../acl_cpp_define.hpp"
3
#include <vector>
4
#include <list>
5
#include "../stdlib/dbuf_pool.hpp"
6
#include "../stdlib/string.hpp"
7
#include "../mime/mime_attach.hpp"
8
#include "
http_type.hpp
"
9
10
#if !defined(ACL_MIME_DISABLE)
11
12
struct
MIME_STATE;
13
struct
MIME_NODE;
14
15
namespace
acl
{
16
17
/**
18
* http mime 结点类,继承关系:
19
* http_mime_node : mime_attach : mime_node
20
* 常用函数功能:
21
* http_mime_node::get_mime_type 获得该结点的类型
22
* mime_node::get_name: 获得该结点的名称
23
* mime_attach::get_filename: 当结点为上传文件类型时,此函数
24
* 获得上传文件的文件名
25
* http_mime_node::get_value: 当结点为参数类型时,此函数获得
26
* 参数值
27
*/
28
class
ACL_CPP_API
http_mime_node
:
public
mime_attach
29
{
30
public
:
31
/**
32
* @param path {const char*} 原始文件存放路径,不能为空
33
* @param node {MIME_NODE*} 对应的 MIME 结点,非空
34
* @param decodeIt {bool} 是否对 MIME 结点的头部数据
35
* 或数据体数据进行解码
36
* @param toCharset {const char*} 本机的字符集
37
* @param off {off_t} 偏移数据位置
38
*/
39
http_mime_node
(
const
char
* path,
const
MIME_NODE* node,
40
bool
decodeIt =
true
,
const
char
* toCharset =
"gb2312"
,
41
off_t off = 0);
42
~
http_mime_node
(
void
);
43
44
/**
45
* 获得该结点的类型
46
* @return {http_mime_t}
47
*/
48
http_mime_t
get_mime_type(
void
)
const
;
49
50
/**
51
* 当 get_mime_type 返回的类型为 HTTP_MIME_PARAM 时,可以
52
* 调用此函数获得参数值;参数名可以通过基类的 get_name() 获得
53
* @return {const char*} 返回 NULL 表示参数不存在
54
*/
55
const
char
* get_value(
void
)
const
;
56
57
protected
:
58
59
private
:
60
http_mime_t
mime_type_;
61
char
* param_value_;
62
63
void
load_param(
const
char
* path);
64
};
65
66
//////////////////////////////////////////////////////////////////////////
67
68
/**
69
* http mime 解析器,该解析器为流式解析器,用户在使用时可以每次仅输入
70
* 部分数据给 update 函数,当该函数返回 true 时表示解析完成且解析正确
71
*/
72
class
ACL_CPP_API
http_mime
:
public
dbuf_obj
73
{
74
public
:
75
/**
76
* 构建函数
77
* @param boundary {const char*} 分隔符,不能为空
78
* @param local_charset {const char*} 本地字符集,非空时会自动将
79
* 参数内容转为本地字符集
80
*/
81
http_mime
(
const
char
* boundary,
const
char
* local_charset =
"gb2312"
);
82
~
http_mime
(
void
);
83
84
/**
85
* 设置 MIME 数据的存储路径,当分析完 MIME 数据后,如果想要
86
* 从中提取数据,则必须给出该 MIME 的原始数据的存储位置,否则
87
* 无法获得相应数据,即 save_xxx/get_nodes/get_node 函数均无法
88
* 正常使用
89
* @param path {const char*} 文件路径名, 如果该参数为空, 则不能
90
* 获得数据体数据, 也不能调用 save_xxx 相关的接口
91
*/
92
void
set_saved_path(
const
char
* path);
93
94
/**
95
* 调用此函数进行流式方式解析数据体内容
96
* @param data {const char*} 数据体(可能是数据头也可能是数据体,
97
* 并且不必是完整的数据行)
98
* @param len {size_t} data 数据长度
99
* @return {bool} 针对 multipart 数据, 返回 true 表示解析完毕;
100
* 对于非 multipart 文件, 该返回值永远为 false, 没有任何意义,
101
* 需要调用者自己判断数据体的结束位置
102
* 注意: 调用完此函数后一定需要调用 update_end 函数通知解析器
103
* 解析完毕
104
*/
105
bool
update(
const
char
* data,
size_t
len);
106
107
/**
108
* 获得所有的 MIME 结点
109
* @return {const std::list<http_mimde_node*>&}
110
*/
111
const
std::list<http_mime_node*>& get_nodes(
void
)
const
;
112
113
/**
114
* 根据变量名取得 HTTP MIME 结点
115
* @param name {const char*} 变量名
116
* @return {const http_mime_node*} 返回空则说明对应变量名的结点
117
* 不存在
118
*/
119
const
http_mime_node
* get_node(
const
char
*
name
)
const
;
120
121
private
:
122
string
boundary_;
123
string
save_path_;
124
off_t off_;
125
MIME_STATE* mime_state_;
126
std::list<http_mime_node*> mime_nodes_;
127
char
local_charset_[32];
128
bool
decode_on_;
129
bool
parsed_;
130
};
131
132
}
// namespace acl
133
134
#endif // !defined(ACL_MIME_DISABLE)
name
HTTP_API void const char * name
Definition:
lib_http.h:620
acl::http_mime_t
http_mime_t
Definition:
http_type.hpp:78
acl
Definition:
acl_cpp_init.hpp:4
acl::http_mime
Definition:
http_mime.hpp:72
acl::dbuf_obj
Definition:
dbuf_pool.hpp:161
acl::mime_attach
Definition:
mime_attach.hpp:10
acl::http_mime_node
Definition:
http_mime.hpp:28
http_type.hpp
ACL_CPP_API
#define ACL_CPP_API
Definition:
acl_cpp_define.hpp:16
include
acl_cpp
http
http_mime.hpp
生成于 2021年 九月 10日 星期五 11:14:44 , 为 acl使用
1.8.15