examples/FileStream combines a streaming file download (baldr::FileStreamResult) with a JSON upload handler that persists the body to disk and returns metadata.
#include<Baldr/Baldr.hpp>#include<Baldr/Http/Results/FileStreamResult.hpp>#include<chrono>#include<cstdint>#include<cstdio>#include<filesystem>#include<fstream>#include<iomanip>#include<sstream>#include<string>#include<string_view>#include<variant>namespacefs=std::filesystem;fs::pathassetsDir(){returnfs::path(__FILE__).parent_path().parent_path()/"assets";}fs::pathuploadsDir(){returnfs::path(__FILE__).parent_path().parent_path()/"uploads";}std::stringfnv1a64(std::string_viewdata){std::uint64_thash=0xcbf29ce484222325ULL;for(unsignedcharc:data){hash^=static_cast<std::uint64_t>(c);hash*=0x100000001b3ULL;}std::ostringstreamoss;oss<<std::hex<<std::setw(16)<<std::setfill('0')<<hash;returnoss.str();}structUploadResponse{std::stringstoredAs;std::size_tbytes;std::stringdigest;std::stringcontentType;};std::int64_tnowMillis(){usingnamespacestd::chrono;returnduration_cast<milliseconds>(system_clock::now().time_since_epoch()).count();}intmain(){autobuilder=skr::ApplicationBuilder().WithExtension<baldr::BaldrExtension>();autoapp=builder.Build<baldr::WebApplication>();constautoassets=assetsDir();constautopdfPath=assets/"baldr.pdf";constautouploads=uploadsDir();std::error_codeec;fs::create_directories(uploads,ec);app->MapGet("/files/baldr.pdf",[pdfPath]{std::ifstreamin(pdfPath,std::ios::binary);returnbaldr::FileStreamResult(std::move(in),"application/pdf","baldr.pdf");});app->MapPost("/upload",[uploads](constbaldr::HttpRequest&request)->std::variant<baldr::JsonResult<UploadResponse,baldr::StatusCode::OK>,baldr::InternalServerErrorResult>{constautostoredAs="upload-"+std::to_string(nowMillis())+".bin";constautooutPath=uploads/storedAs;std::ofstreamout(outPath,std::ios::binary|std::ios::trunc);if(!out){returnbaldr::Results::InternalServerError("could not open output file");}if(!request.body.empty()){out.write(request.body.data(),static_cast<std::streamsize>(request.body.size()));}out.flush();constautodigest=fnv1a64(request.body);std::stringcontentType="application/octet-stream";if(autoit=request.headers.find("Content-Type");it!=request.headers.end()){contentType=it->second;}returnbaldr::Results::Json<UploadResponse,baldr::StatusCode::OK>(UploadResponse{storedAs,request.body.size(),digest,contentType});});app->Run();return0;}