Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. Upload progress in XmlHttpRequest ?

Upload progress in XmlHttpRequest ?

Scheduled Pinned Locked Moved Unsolved QML and Qt Quick
3 Posts 2 Posters 166 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • J Offline
    J Offline
    jhayar
    wrote on last edited by jhayar
    #1

    Hi ,
    would like to ask how can i get upload progress in pure QML using XmlHttpRequest ,

    on javascript we have xmlhttprequest.upload.onprogress
    but on QML , this is not exist

    any ideas ?

    J 1 Reply Last reply
    0
    • J jhayar

      Hi ,
      would like to ask how can i get upload progress in pure QML using XmlHttpRequest ,

      on javascript we have xmlhttprequest.upload.onprogress
      but on QML , this is not exist

      any ideas ?

      J Offline
      J Offline
      jhayar
      wrote on last edited by
      #2

      up, any ideas ?

      L 1 Reply Last reply
      0
      • J jhayar

        up, any ideas ?

        L Offline
        L Offline
        lemons
        wrote on last edited by lemons
        #3

        @jhayar wrap it with a simple C++ class:

        // Uploader.h
        #ifndef UPLOADER_H
        #define UPLOADER_H
        #include <QNetworkAccessManager>
        #include <QNetworkReply>
        #include <QFile>
        #include <QBuffer>
        
        class Uploader : public QObject {
            Q_OBJECT
            Q_PROPERTY(float progress READ progress NOTIFY progressChanged)
        public:
            explicit Uploader(QObject *parent = nullptr)
                : QObject(parent)
                , m_manager(new QNetworkAccessManager(this))
                , m_progress(0)
            {
            }
        
            Q_INVOKABLE void upload(const QUrl &fileUrl, const QUrl &destination) {
                QFile file(fileUrl.toLocalFile());
                if (!file.open(QIODevice::ReadOnly)) {
                    // Error handling
                    return;
                }
        
                QNetworkRequest request(destination);
                auto reply = m_manager->put(request, file.readAll());
        
                connect(reply, &QNetworkReply::uploadProgress, this, [=](qint64 bytesSent, qint64 bytesTotal) {
                    if (bytesTotal > 0) {
                        m_progress = static_cast<float>(bytesSent) / bytesTotal;
                        emit progressChanged();
                    }
                });
            }
        
            float progress() const {
                return m_progress;
            }
        
        signals:
            void progressChanged();
        
        private:
            QNetworkAccessManager *m_manager;
            float m_progress;
        };
        #endif // UPLOADER_H
        
        
        // main.cpp
        #include "Uploader.h"
        // ...
        QQmlApplicationEngine engine;
        qmlRegisterType<Uploader>("Uploader", 1, 0, "Uploader");
        // ..
        
        // main.qml
        import QtQuick 2.15
        import QtQuick.Window 2.15
        import QtQuick.Controls 2.15
        import Uploader 1.0
        
        ApplicationWindow {
            id: window
            width: 640
            height: 640
            visible: true
        
            Uploader {
                id: uploader
            }
        
            ProgressBar {
                id: progressBar
                width: parent.width
                height: 10
                value: uploader.progress
            }
        
            Button {
                text: "Upload File"
                anchors.centerIn: parent
                onClicked: {
                    uploader.upload("file://home/<username>/path/some.file",
                                    "https://target.url/upload")
                }
            }
        }
        
        1 Reply Last reply
        0

        • Login

        • Login or register to search.
        • First post
          Last post
        0
        • Categories
        • Recent
        • Tags
        • Popular
        • Users
        • Groups
        • Search
        • Get Qt Extensions
        • Unsolved