fix(emqx_retainer): use base64 to encode payload in api's result
This commit is contained in:
parent
4d7f001bfe
commit
d2d50443ce
|
@ -34,6 +34,8 @@
|
||||||
, page_params/0
|
, page_params/0
|
||||||
, properties/1]).
|
, properties/1]).
|
||||||
|
|
||||||
|
-define(MAX_BASE64_PAYLOAD_SIZE, 1048576). %% 1MB = 1024 x 1024
|
||||||
|
|
||||||
api_spec() ->
|
api_spec() ->
|
||||||
{[lookup_retained_api(), with_topic_api(), config_api()], []}.
|
{[lookup_retained_api(), with_topic_api(), config_api()], []}.
|
||||||
|
|
||||||
|
@ -179,7 +181,13 @@ format_message(#message{ id = ID, qos = Qos, topic = Topic, from = From
|
||||||
|
|
||||||
format_detail_message(#message{payload = Payload} = Msg) ->
|
format_detail_message(#message{payload = Payload} = Msg) ->
|
||||||
Base = format_message(Msg),
|
Base = format_message(Msg),
|
||||||
Base#{payload => Payload}.
|
EncodePayload = base64:encode(Payload),
|
||||||
|
case erlang:byte_size(EncodePayload) =< ?MAX_BASE64_PAYLOAD_SIZE of
|
||||||
|
true ->
|
||||||
|
Base#{payload => EncodePayload};
|
||||||
|
_ ->
|
||||||
|
Base#{payload => base64:encode(<<"PAYLOAD_TOO_LARGE">>)}
|
||||||
|
end.
|
||||||
|
|
||||||
to_bin_string(Data) when is_binary(Data) ->
|
to_bin_string(Data) when is_binary(Data) ->
|
||||||
Data;
|
Data;
|
||||||
|
|
Loading…
Reference in New Issue