IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> qt4传文件 -> 正文阅读

[PHP知识库]qt4传文件

pro

QT       += core gui network
QT       += script

.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QFile>
#include <QDebug>
#include <QUrl>
#include <QString>
#include <QProgressBar>
#include <QMessageBox>
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    QNetworkReply *reply;
    QProgressBar *progressBar;
    QFile *file;
public slots:
    void replyFinished(QNetworkReply*);
    void loadError(QNetworkReply::NetworkError);
    void loadProgress(qint64 bytesSent,qint64 bytesTotal);
    void readContent();
private slots:
    void on_pushButton_clicked();
    void on_pushButton_2_clicked();
};

#endif // MAINWINDOW_H

.cp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDateTime>
#include <QtScript/QtScript>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);


}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::readContent()    //下载时向本地文件中写入数据
{

    file->write(reply->readAll());
    qDebug()<<"jieshoutgfgdg"<<QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz dddd");
}



void MainWindow::replyFinished(QNetworkReply*)    //删除指针,更新和关闭文件
{

    if(reply->error() == QNetworkReply::NoError)
        {

        //php返回部分
//            QByteArray bytes=reply->readAll();//读取所有字节
//            QScriptEngine engine;
//            QScriptValue sc=engine.evaluate("value="+bytes);
//            qDebug() <<sc.property("result").toString();
//            qDebug() <<sc.property("message").toString();//中文会出现乱码,但不影响程序里面的判断
//            if(sc.property("message").toString()=="加载成功"){
//                qDebug() <<"ni";
//            }

//            //        if(sc.property("chi").isArray()) //解析数组

//            //        {

//            //        QScriptValueIterator it(sc.property("chi"));

//            //               while (it.hasNext())

//            //               {

//            //                  it.next();

//            //                  if(!it.value().property("a").toString().isEmpty())

//            //                      qDebug() << it.value().property("a").toString();

//            //               }

//            //        }



            reply->deleteLater();
            file->flush();
            file->close();
            qDebug()<<"jieshoutgsdd"<<QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz dddd");
        }
        else
        {
        progressBar->close();
            QMessageBox::critical(NULL, tr("Error"), "Failed!!!");
        }
}

void MainWindow::loadProgress(qint64 bytesSent, qint64 bytesTotal)    //更新进度条
{//16kb一包上发
       qDebug() << "loaded" << bytesSent << "of" << bytesTotal;
       progressBar->setMaximum(bytesTotal); //最大值
       progressBar->setValue(bytesSent);  //当前值



}

void MainWindow::loadError(QNetworkReply::NetworkError)    //传输中的错误输出
{
     qDebug()<<"Error: "<<reply->error();
}






void MainWindow::on_pushButton_clicked()
{
    //10.3m--云端测试,948ms

        qDebug()<<"jieshoutgs"<<QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz dddd");


        file = new QFile("D:/wamp64/www/holeLocking/upload/hello.png");
        file->open(QIODevice::ReadOnly);
        QByteArray byte_file="";
        byte_file=file->readAll();

        QNetworkAccessManager *accessManager2 = new QNetworkAccessManager(this);    //往该目录中上传文件
        accessManager2->setNetworkAccessible(QNetworkAccessManager::Accessible);

        QUrl url2("http://192.168.0.113:80/holeLocking/upload.php?filename=hsello.png");    //如这里指定的上传文件至HTTP服务器目录中的upload目录中
        QNetworkRequest request2(url2);
        request2.setHeader(QNetworkRequest::ContentTypeHeader, "application/octet-stream");
        reply = accessManager2->post(request2, byte_file);



        progressBar = new QProgressBar();
        progressBar->setValue(0);
        progressBar->show();


        connect(accessManager2,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*)));
        connect(reply, SIGNAL(error(QNetworkReply::NetworkError)),this,SLOT(loadError(QNetworkReply::NetworkError)));
        connect(reply, SIGNAL(uploadProgress(qint64 ,qint64)), this, SLOT(loadProgress(qint64 ,qint64)));
}

void MainWindow::on_pushButton_2_clicked()
{
    //10.3m-----云端测试,40s
        qDebug()<<"jieshoutgd"<<QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz dddd");
        file = new QFile("D:/wamp64/www/holeLocking/upload/1d3d52.doc");
        file->open(QIODevice::WriteOnly);

        QNetworkAccessManager *accessManager = new QNetworkAccessManager(this);
        accessManager->setNetworkAccessible(QNetworkAccessManager::Accessible);
        //QUrl url("http://192.168.0.113:80/qt/upload/10m.doc");//如这里指定的上传文件至HTTP服务器目录中的upload目录中
        QUrl url("http://192.168.0.113:80/holeLocking/download.php?filename=23dd.doc");    //采用接口获取
        QNetworkRequest request(url);
        request.setHeader(QNetworkRequest::ContentTypeHeader, "application/octet-stream");
        reply = accessManager->get(request);

        progressBar = new QProgressBar();
        progressBar->setValue(0);
        progressBar->show();


        connect((QObject *)reply, SIGNAL(readyRead()), this, SLOT(readContent()));
        connect(accessManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
        connect(reply, SIGNAL(error(QNetworkReply::NetworkError)),this,SLOT(loadError(QNetworkReply::NetworkError)));
        connect(reply, SIGNAL(downloadProgress(qint64 ,qint64)), this, SLOT(loadProgress(qint64 ,qint64)));

}

php部分
download.php

<?php

 $content = file_get_contents('php://input');
 $foldername = "upload";
  $filename = $_GET["filename"];

 $fp = fopen($foldername."/".$filename,'w+');
 fwrite($fp, $content, strlen($content));
 fclose($fp);



 //使用 FILE_APPEND 标记,可以在文件末尾追加内容
 //LOCK_EX 标记可以防止多人同时写入

 //($foldername.$filename, $content.trim,FILE_APPEND|LOCK_EX);
//  $arr=array("result"=>"true","message"=>"加载成功");
//  print(json_encode($arr, JSON_UNESCAPED_UNICODE));


?>

upload.php

<?php

  $filename = $_GET["filename"];

//获取文件dir
$file_dir = "upload"."/".$filename;
//打开文件
            $handler            = fopen($file_dir, 'r+b');
            $file_size          = filesize($file_dir);
            //声明头信息
            Header("Content-type: application/octet-stream");
            Header("Accept-Ranges: bytes");
            Header("Accept-Length: ".$file_size);
            Header("Content-Disposition: attachment; filename=" . basename( $file_dir));
            // 输出文件内容
            echo fread($handler,$file_size);
            fclose($handler);
            ob_end_flush();
            exit;



 


?>
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-08-20 14:52:17  更:2021-08-20 14:54:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/12 2:27:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码