RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1228698
Accepted
Alrott SlimRG
Alrott SlimRG
Asked:2022-01-08 23:07:43 +0000 UTC2022-01-08 23:07:43 +0000 UTC 2022-01-08 23:07:43 +0000 UTC

为什么只有部分文件来了?

  • 772

有一个文件下载代码:

QNetworkAccessManager nam;
nam.setRedirectPolicy(QNetworkRequest::NoLessSafeRedirectPolicy);
QNetworkRequest req(QUrl("https://slimpage.ru/DWAKU2_updater.php"));
req.setRawHeader("Content-Type","multipart/form-data; boundary=margin");
QByteArray data = ("--margin\r\n");
data.append("Content-Disposition: form-data; name=\"download_latest\"\r\n\r\n\r\n");
data.append("--margin--\r\n");
QNetworkReply *reply = nam.post(req, data);
QEventLoop loop;
QObject::connect(reply, SIGNAL(readyRead()), &loop, SLOT(quit()));
QObject::connect(&nam, SIGNAL(finished(QNetworkReply*)), &loop, SLOT(quit()));
if (!reply->isFinished()) loop.exec();
QSaveFile file(QCoreApplication::applicationDirPath() + QDir::separator() + "latest_DWAKU2.exe");
file.open(QIODevice::WriteOnly);
qDebug() << reply->size();
file.write(reply->readAll());
file.commit();
nam.deleteLater();
delete reply;

有PHP代码:

<?php
$dir = '/SlimPage/www/DWAKU2';

function file_force_download($file) {
  if (file_exists($file)) {
    // сбрасываем буфер вывода PHP, чтобы избежать переполнения памяти выделенной под скрипт
    // если этого не сделать файл будет читаться в память полностью!
    if (ob_get_level()) {
      ob_end_clean();
    }
    // заставляем браузер показать окно сохранения файла
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename=' . basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    // читаем файл и отправляем его пользователю
    readfile($file);
  }
}

// GET запросы
if (!empty($_GET)) {

    // Проверка доступности сервера
    if(isset($_GET['ping'])) {  
        echo 'pong';
        exit;
    } else

    // Получить версию для обновления
    if(isset($_GET['get_latest_version'])) {
        $files = array();
        foreach(glob($dir . '/*') as $file) {   
            if (is_file($file)) {
                if (pathinfo($file, PATHINFO_EXTENSION) == 'exe')
                $files[] = basename(pathinfo($file, PATHINFO_FILENAME));    
            }
        } 
        echo array_pop($files);
        exit;
    }       
}

// POST запросы
if (!empty($_POST)) {
    
    // Загрузка новой версии
    if(isset($_POST['download_latest'])) {
        $files = array();
        foreach(glob($dir . '/*') as $file) {   
            if (is_file($file)) {
                if (pathinfo($file, PATHINFO_EXTENSION) == 'exe')
                    $files[] = $file;                   
            }
        } 
        file_force_download(array_pop($files));
        exit;
    }   
}
    

?>

文件大小为 6.03 Mb,通过 POST 请求下载仅为 48 Kb

你能建议如何解决这个问题吗?

php
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Alrott SlimRG
    2022-01-10T07:22:44Z2022-01-10T07:22:44Z

    如您所见,该文件很大。
    服务器分部分发送,QReply 分部分接收。
    重要的是要注意收到第一部分isFinished()时会发生什么。 所以我们得到只有服务器给出的第一部分被下载。 要获取整个文件 - 我们需要部分下载,将接收到的字节大小与最后一个进行比较,或者检查以获取整个文件:

    while (reply->isRunning()) loop.exec();
    
    • 0

相关问题

  • mysqli 类的对象无法转换为字符串

  • 您的系统中缺少 ext-http *,您的系统中缺少 ext-mysql_xdevapi *

  • 如何从csv中删除bom?

  • 当我按下 Enter 键时,如何让 PhpStorm 的 Emmet 插件触发,就像 VS Code 一样?

  • 注释在 Symfony5 中不起作用

  • 搜索最近的地理位置点

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    表格填充不起作用

    • 2 个回答
  • Marko Smith

    提示 50/50,有两个,其中一个是正确的

    • 1 个回答
  • Marko Smith

    在 PyQt5 中停止进程

    • 1 个回答
  • Marko Smith

    我的脚本不工作

    • 1 个回答
  • Marko Smith

    在文本文件中写入和读取列表

    • 2 个回答
  • Marko Smith

    如何像屏幕截图中那样并排排列这些块?

    • 1 个回答
  • Marko Smith

    确定文本文件中每一行的字符数

    • 2 个回答
  • Marko Smith

    将接口对象传递给 JAVA 构造函数

    • 1 个回答
  • Marko Smith

    正确更新数据库中的数据

    • 1 个回答
  • Marko Smith

    Python解析不是css

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5