11 #include <QTemporaryFile> 25 return d->headers.contentType();
39 QString fileTemplate = u
"%1/qt_temp.XXXXXX"_s;
47 setErrorString(u
"Failed to open file for saving: " + out.errorString());
48 qCWarning(CUTELYST_UPLOAD) << errorString();
50 qint64 posOrig = d->pos;
55 qint64 in = read(block,
sizeof(block));
59 if (in != out.write(block, in)) {
60 setErrorString(u
"Failure to write block"_s);
61 qCWarning(CUTELYST_UPLOAD) << errorString();
71 if (!error && !out.rename(newName)) {
73 setErrorString(u
"Cannot create %1 for output"_s.arg(newName));
74 qCWarning(CUTELYST_UPLOAD) << errorString();
87 std::unique_ptr<QTemporaryFile> ret;
89 #ifndef QT_NO_TEMPORARYFILE 92 ret = std::make_unique<QTemporaryFile>();
94 ret = std::make_unique<QTemporaryFile>(templateName);
99 qint64 posOrig = d->
pos;
104 qint64 in = read(block,
sizeof(block));
109 if (in != ret->
write(block, in)) {
110 setErrorString(u
"Failure to write block"_s);
111 qCWarning(CUTELYST_UPLOAD) << errorString();
125 qCWarning(CUTELYST_UPLOAD) <<
"Failed to open temporary file.";
129 Q_UNUSED(templateName);
144 return d->endOffset - d->startOffset;
162 open(prv->device->openMode());
163 const QByteArray disposition = prv->headers.contentDisposition();
164 int start = disposition.
indexOf(
"name=\"");
167 int end = disposition.indexOf(u
'"', start);
174 start = disposition.
indexOf(
"filename=\"");
177 int end = disposition.indexOf(
'"', start);
198 qint64 posOrig = d->device->pos();
200 d->device->seek(d->startOffset + d->pos);
201 qint64 len = d->device->read(data, qMin(
size() - d->pos, maxlen));
202 d->device->seek(posOrig);
210 qint64 posOrig = d->device->pos();
212 d->device->seek(d->startOffset + d->pos);
213 qint64 len = d->device->readLine(data, qMin(
size() - d->pos, maxlen));
214 d->device->seek(posOrig);
226 #include "moc_upload.cpp" qsizetype indexOf(QChar ch, qsizetype from, Qt::CaseSensitivity cs) const const
virtual bool seek(qint64 pos)
qint64 readLineData(char *data, qint64 maxlen) override
std::unique_ptr< QTemporaryFile > createTemporaryFile(const QString &templateName={})
QByteArray contentType() const
qint64 writeData(const char *data, qint64 maxSize) override
virtual bool open(QIODeviceBase::OpenMode mode)
Cutelyst Upload handles file upload requests.
qsizetype indexOf(QByteArrayView bv, qsizetype from) const const
bool isEmpty() const const
qint64 write(const QByteArray &data)
The Cutelyst namespace holds all public Cutelyst API.
virtual ~Upload() override
bool seek(qint64 pos) override
QString fromLatin1(QByteArrayView str)
virtual void close() override
virtual bool seek(qint64 pos) override
bool save(const QString &filename)
virtual qint64 pos() const const override
Upload(UploadPrivate *prv)
qint64 pos() const override
qint64 readData(char *data, qint64 maxlen) override
QString arg(Args &&... args) const const
qint64 size() const override