11#include <QTemporaryFile>
24 return d->headers.contentType();
38 QString fileTemplate = QStringLiteral(
"%1/qt_temp.XXXXXX");
39 QFile out(fileTemplate.arg(QFileInfo(newName).path()));
40 if (!out.open(QIODevice::ReadWrite)) {
46 setErrorString(QLatin1String(
"Failed to open file for saving: ") + out.errorString());
47 qCWarning(CUTELYST_UPLOAD) << errorString();
49 qint64 posOrig = d->pos;
54 qint64 in = read(block,
sizeof(block));
57 if (in != out.write(block, in)) {
58 setErrorString(QLatin1String(
"Failure to write block"));
59 qCWarning(CUTELYST_UPLOAD) << errorString();
69 if (!error && !out.rename(newName)) {
71 setErrorString(QStringLiteral(
"Cannot create %1 for output").arg(newName));
72 qCWarning(CUTELYST_UPLOAD) << errorString();
85#ifndef QT_NO_TEMPORARYFILE
88 if (templateName.isEmpty()) {
89 ret =
new QTemporaryFile(
this);
91 ret =
new QTemporaryFile(templateName,
this);
96 qint64 posOrig = d->pos;
101 qint64 in = read(block,
sizeof(block));
105 if (in != ret->write(block, in)) {
106 setErrorString(QLatin1String(
"Failure to write block"));
107 qCWarning(CUTELYST_UPLOAD) << errorString();
121 qCWarning(CUTELYST_UPLOAD) <<
"Failed to open temporary file.";
125 Q_UNUSED(templateName)
140 return d->endOffset - d->startOffset;
147 QIODevice::seek(
pos);
158 open(prv->device->openMode());
159 const QString disposition = prv->headers.contentDisposition();
160 int start = disposition.indexOf(u
"name=\"");
163 int end = disposition.indexOf(u
'"', start);
165 d->name = disposition.mid(start, end - start);
169 start = disposition.indexOf(u
"filename=\"");
172 int end = disposition.indexOf(QLatin1Char(
'"'), start);
174 d->filename = disposition.mid(start, end - start);
193 qint64 posOrig = d->device->pos();
195 d->device->seek(d->startOffset + d->pos);
196 qint64 len = d->device->read(data, qMin(
size() - d->pos, maxlen));
197 d->device->seek(posOrig);
205 qint64 posOrig = d->device->pos();
207 d->device->seek(d->startOffset + d->pos);
208 qint64 len = d->device->readLine(data, qMin(
size() - d->pos, maxlen));
209 d->device->seek(posOrig);
221#include "moc_upload.cpp"
Cutelyst Upload handles file upload request
Upload(UploadPrivate *prv)
QString contentType() const
virtual bool seek(qint64 pos) override
virtual qint64 pos() const override
virtual qint64 readLineData(char *data, qint64 maxlen) override
virtual qint64 writeData(const char *data, qint64 maxSize) override
QTemporaryFile * createTemporaryFile(const QString &templateName=QString())
virtual qint64 readData(char *data, qint64 maxlen) override
virtual qint64 size() const override
bool save(const QString &filename)
The Cutelyst namespace holds all public Cutelyst API.