diff options
Diffstat (limited to 'zenserver')
| -rw-r--r-- | zenserver/projectstore.cpp | 15 | ||||
| -rw-r--r-- | zenserver/projectstore.h | 1 |
2 files changed, 15 insertions, 1 deletions
diff --git a/zenserver/projectstore.cpp b/zenserver/projectstore.cpp index 0dc0da1ae..c2c8c2421 100644 --- a/zenserver/projectstore.cpp +++ b/zenserver/projectstore.cpp @@ -1057,8 +1057,21 @@ HttpProjectService::HttpProjectService(CasStore& Store, ProjectStore* Projects) IoBuffer Payload = HttpReq.ReadPayload(); + CbPackage::AttachmentResolver Resolver = [&](const IoHash& Hash) -> SharedBuffer { + std::filesystem::path AttachmentPath = Log.TempPath() / Hash.ToHexString(); + + if (IoBuffer Data = IoBufferBuilder::MakeFromFile(AttachmentPath.native().c_str())) + { + return SharedBuffer::Clone(MemoryView(Data.Data(), Data.Size())); + } + else + { + return {}; + } + }; + CbPackage Package; - Package.Load(Payload); + Package.Load(Payload, &UniqueBuffer::Alloc, &Resolver); CbObject Core = Package.GetObject(); diff --git a/zenserver/projectstore.h b/zenserver/projectstore.h index 4ad0e42e0..0b41b837b 100644 --- a/zenserver/projectstore.h +++ b/zenserver/projectstore.h @@ -88,6 +88,7 @@ public: const std::string& OplogId() const { return m_OplogId; } const std::wstring& TempDir() const { return m_TempPath.native(); } + const std::filesystem::path& TempPath() const { return m_TempPath; } spdlog::logger& Log() { return m_OuterProject->Log(); } |