ImagingTools Core SDK
CHttpFileUploadServletComp.h
1// SPDX-License-Identifier: LGPL-2.1-or-later OR GPL-2.0-or-later OR GPL-3.0-or-later OR LicenseRef-ImtCore-Commercial
2#pragma once
3
4
5// ImtCore includes
6#include <imtrest/CHttpServletCompBase.h>
7#include <imtrest/CHttpResponse.h>
8#include <imtservergql/IFileUploadHandler.h>
9
10
11namespace imtrest
12{
13
14
15class CHttpFileUploadServletComp: public imtrest::CHttpServletCompBase
16{
17public:
18 typedef imtrest::CHttpServletCompBase BaseClass;
19
20 I_BEGIN_COMPONENT(CHttpFileUploadServletComp)
21 I_ASSIGN(m_fileUploadHandlerPtr, "FileUploadHandler", "File upload handler", false, "FileUploadHandlerPtr");
22 I_END_COMPONENT
23
24protected:
25 // reimplemented (imtrest::CHttpServletCompBase)
26 virtual ConstResponsePtr OnPut(
27 const QByteArray& commandId,
28 const imtrest::IRequest::CommandParams& commandParams,
29 const HeadersMap& headers,
30 const imtrest::CHttpRequest& request) const override;
31
32private:
33 struct RangeData
34 {
35 QString units;
36 qsizetype startIndex = -1;
37 qsizetype endIndex = -1;
38 qsizetype totalSize = -1;
39 };
40
41private:
42 RangeData GetRangeDataFromString(const QString& dataString) const;
43 CHttpResponse::Headers GetRequestHeaders(const CHttpRequest& request) const;
44 ConstResponsePtr CreateResponse(
45 const IRequest& request,
46 int statusCode,
47 const imtrest::CHttpResponse::Headers& headers,
48 const QByteArray& data,
49 const QByteArray& dataTypeId) const;
50
51private:
52 I_REF(imtservergql::IFileUploadHandler, m_fileUploadHandlerPtr);
53
54 static QByteArray s_plainTextReponseTypeId;
55 static QByteArray s_octetStreamTypeId;
56};
57
58
59} // namespace imtrest
60
61
Interface for handling chunked file uploads.