diff --git a/src/lms/ui/admin/TracingView.cpp b/src/lms/ui/admin/TracingView.cpp index 2d6b6812..81021263 100644 --- a/src/lms/ui/admin/TracingView.cpp +++ b/src/lms/ui/admin/TracingView.cpp @@ -20,6 +20,7 @@ #include "TracingView.hpp" #include +#include #include #include #include @@ -49,7 +50,14 @@ namespace lms::ui void handleRequest(const Wt::Http::Request&, Wt::Http::Response& response) { response.setMimeType("application/gzip"); - suggestFileName(core::stringUtils::toISO8601String(Wt::WDateTime::currentDateTime()) + "-traces.json.gz"); + + auto encodeHttpHeaderField = [](const std::string& fieldName, const std::string& fieldValue) { + // This implements RFC 5987 + return fieldName + "*=UTF-8''" + Wt::Utils::urlEncode(fieldValue); + }; + + const std::string cdp{ encodeHttpHeaderField("filename", "LMS_traces_" + core::stringUtils::toISO8601String(Wt::WDateTime::currentDateTime()) + ".json.gz") }; + response.addHeader("Content-Disposition", "attachment; " + cdp); boost::iostreams::filtering_ostream gzipStream; gzipStream.push(boost::iostreams::gzip_compressor{});