","image":"http://www.luping.net/uploads/20241104/17307198076728b03faccae.jpg","datePublished":"2024-11-08T22:31:00+08:00","dateModified":"2024-11-08T22:31:00+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何在不阻塞服务器和客户端的情况下实时读取和回显服务器当前正在写入的上传文件大小?

如何在不阻塞服务器和客户端的情况下实时读取和回显服务器当前正在写入的上传文件大小?

发布于2024-11-08
浏览:452

How to Read and Echo Currently Writing Size of Uploaded File in Server in Realtime Without Blocking Server and Client?

如何在不阻塞服务器和客户端的情况下,实时读取和打印正在服务器端写入的上传文件的大小?

让我们展开来讨论这个问题:

为了实时获取文件上传的进度,我们在 POST 请求中通过 fetch() 从 Blob、File、TypedArray 或 ArrayBuffer 对象设置了 body 对象。

目前的实现将 File 对象设置为 fetch() 的第二个参数传递给 body 对象。

需求:

作为 text/event-stream 读取正在写入服务器文件系统的文件的大小并将其回显到客户端。当 GET 请求中 var 查询字符串参数提供的所有字节都写入完成后停止。文件读取目前在单独的脚本环境中进行,其中 GET 调用向读取文件的脚本发出调用,然后 POST 到将文件写入服务器的脚本。

在完成文件大小回显部分后再尝试解决处理服务器端文件写入或文件读取以获取当前文件大小的潜在问题。

目前尝试使用 php 满足要求。不过也对 c、bash、nodejs、python 或其他语言或方法感兴趣,这些语言或方法可以用来执行相同任务。

客户端 javascript 部分没问题。只是不太精通 php(世界上使用最广泛的服务器端语言之一),无法在不包含不必要的零件的情况下实施该模式。

动机:

fetch 的进度指示器?

相关:

带有 ReadableStream 的 Fetch

问题:

获得

PHP Notice:  Undefined index: HTTP_LAST_EVENT_ID in stream.php on line 7

在终端。

此外,如果将

while(file_exists($_GET["filename"]) 
  && filesize($_GET["filename"]) < intval($_GET["filesize"]))

替换为

while(true)

它会在 EventSource 处产生错误。

没有 sleep() 调用,正确的文件大小会分发到一个大小为 3.3MB 的文件的消息事件中,3321824、61921、26214 和 38093 分别在上传同一文件三次时被打印出来。预期结果是在以下位置写入文件时获取文件大小:

stream_copy_to_stream($input, $file);

而不是上传的文件对象的 filesize。fopen() 或 stream_copy_to_stream() 是否会阻止其他 php process 访问 stream.php?

到目前为止尝试的方法:

php 引用自

  • 超越 $_POST、$_GET 和 $_FILE:在 JavaScriptPHP 中处理 Blob
  • 具有 PHP 示例的 Server-Sent Events 简介

php

// 能否合并 `data.php`、`stream.php` 为同一个文件?
// 能否使用 `STREAM_NOTIFY_PROGRESS` 
// "Indicates current progress of the stream transfer 
// in bytes_transferred and possibly bytes_max as well" to read bytes?
// do we need to call `stream_set_blocking` to `false`
// data.php
// stream.php

javascript





版本声明 本文转载于:1729432843如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 通过“项目:使用互斥体同步多线程打印”课程释放您的编码潜力
    通过“项目:使用互斥体同步多线程打印”课程释放您的编码潜力
    您准备好深入多线程编程的世界并学习如何使用互斥体来同步字符串的打印了吗? LabEx 提供的项目:使用互斥体同步多线程打印课程就是您的最佳选择。 在这个基于项目的综合课程中,您将踏上了解互斥体在协调多线程执行方面的重要性的旅程。您将首先修改现有的“混沌打字机”程序,确保字符串以正确的顺序打印,而不会...
    编程 发布于2024-11-09
  • 为什么我在 MySQL 中收到“\'create_date\'时间戳字段的默认值无效”错误?
    为什么我在 MySQL 中收到“\'create_date\'时间戳字段的默认值无效”错误?
    “create_date”时间戳字段的默认值无效创建带有时间戳列的表并指定默认值“0000-”时00-00 00:00:00',可能会出现错误,指示“'create_date'的默认值无效”。这个错误是由 MySQL 的 SQL 模式 - NO_ZERO_DATE 引起的。根...
    编程 发布于2024-11-09
  • 尽管出现“页面已移动”错误,如何使用 cURL 检索页面内容?
    尽管出现“页面已移动”错误,如何使用 cURL 检索页面内容?
    使用 cURL 检索页面内容在此上下文中,您试图使用 cURL 抓取 Google 搜索结果页面的内容。尽管尝试设置用户代理和各种选项,但您仍无法成功检索页面内容。重定向或“页面移动”错误继续困扰着您。据信该问题可能源于查询字符串中特殊字符的编码。为了缓解这种情况,需要更改 PHP 代码。方法如下:...
    编程 发布于2024-11-09
  • 如何使用 JPA 和 Hibernate 以 UTC 格式存储日期/时间?
    如何使用 JPA 和 Hibernate 以 UTC 格式存储日期/时间?
    使用 JPA 和 Hibernate 在 UTC 时区存储日期/时间在 JPA/ 中处理日期和时间时担心时区差异休眠应用程序?本文探讨了如何在 UTC (GMT) 时区有效存储和检索时态数据,确保跨不同时区进行一致且准确的处理。考虑下面带注释的 JPA 实体:public class Event {...
    编程 发布于2024-11-09
  • 如何使用 CSS 创建动态扩展的文本输入字段?
    如何使用 CSS 创建动态扩展的文本输入字段?
    通过 CSS 增强文本输入响应能力制作 Web 表单时,控制文本输入字段的大小至关重要。 CSS 提供了一种简单的方法来定义其初始尺寸。但是,如果您希望输入随着用户键入而动态扩展并达到最大宽度,该怎么办?本文深入研究了仅 CSS 和基于 HTML 的技术来实现此行为。CSS 和内容可编辑利用 CSS...
    编程 发布于2024-11-09
  • 关于 Javascript Promise 的有趣事实
    关于 Javascript Promise 的有趣事实
    Promise 始终是异步的 Promise 的回调总是在同步代码之后执行 const promise = Promise.resolve(); promise.then(() => console.log('async')); console.log('sync'); ...
    编程 发布于2024-11-09
  • LightFlow:Go 的任务编排框架
    LightFlow:Go 的任务编排框架
    我开发了 LightFlow,一个任务编排框架,旨在简化 Go 中复杂工作流程的管理。它专注于执行时序并减少对外部配置文件的需求。 主要特点: 独立上下文:每个步骤都通过独立上下文链接,仅允许访问相关数据。 可合并流程:您可以灵活组合任务流程,以便在不同流程中重复使用。 检查点恢复:...
    编程 发布于2024-11-09
  • 使用 HTML、CSS 和 JavaScript 构建简单的链接检查器工具
    使用 HTML、CSS 和 JavaScript 构建简单的链接检查器工具
    使用 HTML、CSS 和 JavaScript 构建简单的链接检查器工具 作为...
    编程 发布于2024-11-09
  • ## 为什么 GetSystemTimeAdjustment 并不总是反映 Windows 7 上的真实时间调整?
    ## 为什么 GetSystemTimeAdjustment 并不总是反映 Windows 7 上的真实时间调整?
    Windows 7 计时函数:了解 GetSystemTimeAdjustment正如您所观察到的,在 Windows 7 上使用 GetSystemTimeAdjustment 函数的结果可能会令人费解。为了更好地理解,让我们解决您的问题:问题1:假设的正确性您的假设总体上是正确的。如果系统时间定...
    编程 发布于2024-11-09
  • 掌握 JavaScript:初学者的基本技巧
    掌握 JavaScript:初学者的基本技巧
    JavaScript 是一种多功能且功能强大的编程语言,构成了现代 Web 开发的支柱。如果您是 JavaScript 新手,这里有一些基本技巧可帮助您掌握其概念并开始构建交互式 Web 应用程序: 1. 了解基础知识: 变量和数据类型:了解变量、它们的类型(数字、字符串、布尔值、对...
    编程 发布于2024-11-09
  • 如何在 Python 中安全地存储用户凭据而不损害数据隐私?
    如何在 Python 中安全地存储用户凭据而不损害数据隐私?
    在 Python 中保护用户凭证在 Python 中,存储用户名和密码等敏感信息需要仔细考虑。在编写定期从第三方服务检索数据等任务的脚本时,您需要一种可靠且安全的方法来存储凭据而不损害数据隐私。一个选择是利用 Python 密钥环库,它与操作系统加密集成机制。在 Windows 中,密钥环采用 Cr...
    编程 发布于2024-11-09
  • 在 Go 中何时使用限制为切片类型的切片参数与通用切片参数?
    在 Go 中何时使用限制为切片类型的切片参数与通用切片参数?
    泛型切片参数:理解区别在 Go 中,泛型编程引入了类型参数,允许函数对不同类型进行操作。感兴趣的一个领域是限制为切片类型的切片参数和通用切片参数之间的区别。限制为切片类型的切片参数考虑使用 slices.Grow 函数第一个参数受 ~[]E 约束。这意味着该参数的类型必须是元素类型为 E 的切片类型...
    编程 发布于2024-11-09
  • 简单DIY心率监测器+心电图显示器
    简单DIY心率监测器+心电图显示器
    目标 这个迷你项目/教程的目标是用最少的组件制作一个超级简单的心率监视器和滚动心电图显示。 要求: Python 音频接口 1/4寸线/吉他线/乐器线(只需通过音频接口接入电脑即可) 快速背景 心脏的肌肉产生电信号。其中一些信号可以在皮肤表面检测到。 我们可以使用表面电极拾取这些信号。问题是,这些...
    编程 发布于2024-11-09
  • 生态倡议地图:CSS(第 2 部分)
    生态倡议地图:CSS(第 2 部分)
    Introducción En este tutorial, aprenderás cómo mejorar la apariencia visual de tu página HTML aplicando estilos CSS de manera gradual. A lo l...
    编程 发布于2024-11-09
  • 如何使全局变量可跨多个 JavaScript 文件访问?
    如何使全局变量可跨多个 JavaScript 文件访问?
    跨多个 JavaScript 文件访问全局变量当使用分布在多个文件中的 JavaScript 代码时,共享数据的需求变得显而易见。实现此目的的一种方法是使用全局变量。用户遇到一个问题,外部 JavaScript 文件 (helpers.js) 中定义的全局变量在调用它的 HTML 文件中仍然无法访问...
    编程 发布于2024-11-09

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3