问题标签 [createwritestream]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - writeStream write 将未知字符添加到markdown文件
我正在尝试通过 Web 界面编辑降价文件。我已经可以在我的编辑器中成功读取和解析文件。
现在我正在尝试在用户输入时更新原始文件。我正在使用带有 r+ 标志的 createWriteStream。用户输入已成功写入目标文件,但文件中不断添加一些奇怪的字符。
我认为这是一些编码问题,但不知道该怎么做。
这是我的代码:
所以基本上,每次用户打开一个文件时,我都会重置编写器并创建一个新的。当用户键入时,将调用 writeNewData 函数,将整个文档的文本作为参数传递。所以我截断了内容并写了新的。
这是我打开文件时的内容:
我尝试将编码显式设置为“utf8”,但没有成功。我在文档中搜索了选项及其描述,但我必须说我在这个过程中迷路了。
我还尝试了 strip-bom 库,认为它可能是 BOM 字符(仍然不确定)但没有成功。
编辑:
看起来这个问题只在使用 truncate 方法时发生。我尝试使用 truncateSync 但发生了同样的问题。如果我根本不使用截断,除了文件的全部内容不断地附加到前一个内容之外,没有问题。导致这样的事情:
javascript - Javascript Promise 无法解析 createWriteStream
我尝试了许多让我的函数返回参数的变体,这样我只能在一个步骤完成时运行我的函数,但寻找不会让我陷入回调地狱的最佳方法。
我有以下功能
我在这里这样称呼:
这是 PromiseAll 中调用的方法
无论我尝试什么问题,我都无法保证 compareItems 在 convertPdfToImage 之后运行(PromiseAll 已解决)
node.js - 未接收到数据时向 Node.js 流添加“静默帧”
我正在使用 Node.js 创建一个 Discord.js 机器人,它在语音通道中记录用户的音频。它加入一个频道并开始分别收听每个用户。它记录到一个 .pcm 文件(所以只有原始数据)。
现在,这可行,但是 Discord 的音频流的性质导致了一个问题。从 Discord 的 API 获得的音频流仅在特定用户说话时发送数据,而不是在他们沉默时发送数据。这导致用户说话的时刻被一个接一个地粘贴,中间没有沉默。
例如,我说话 5 秒钟,然后停止说话 5 秒钟,然后再开始说话,依此类推。如果我这样做 1 分钟,我将得到一个只有 30 秒长的文件,因为 5 秒的静音没有记录在流中。
代码看起来像这样(receiver
这是 Discord API 为语音连接提供的,当我发出命令时流任意结束):
audioStream
输出是 16 位 little-endian 44100 Hz 流(因此仅在用户讲话时)。
有没有办法可以用某种无声帧填补数据空白?或者也许保持静默流运行,只在数据进来时才输入数据?
node.js - 在NodeJS中完成下载和文件保存后从异步函数返回
我有一系列的事件是这样的:
在文件实际在磁盘上之前,我的代码会继续运行。这是我的下载功能:
下载完成downloadSyncFile()
后,该功能似乎正在返回axios
,但未完成对磁盘的写入。
如何确保文件在downloadSyncFile()
返回之前安全地写入磁盘?
node.js - 如何使用 Node.js 流附加到文件末尾?
我有一个 node.js 应用程序,它打开一个流:
然后,我异步地将文本添加到文件中:
这段代码在循环中运行,所以它发生了数百次。但是,循环是异步的,所以它有时会暂停,同时我可以output.txt
在外部编辑器中编辑文件,并且(例如)在开头添加一些字符。
但是,当我这样做时,下次outputStream.write
执行时,它会覆盖之前添加的最后几个字符(与我在外部添加的字符数相同)。
有什么方法可以防止这种情况吗?某种方式告诉writeStream
找到文件的结尾,然后添加文本?
node.js - 谷歌云存储上传 0 字节 Node.js
我正在使用谷歌云存储。此代码将在存储桶中保存一个对象,但它只是空的。它显示大小为 0 字节
node.js - 无法使用一个可读流写入 Node JS 中的两个不同目标
我有一个客户端应用程序,用户可以在其中上传图像。我在我的 Node JS 应用程序中收到此图像作为可读数据,然后在保存之前对其进行操作,如下所示:
这工作正常,并将文件写入项目本地目录。当我尝试在同一个异步函数中再次使用相同的可读数据时,问题就出现了。请注意,所有这些代码都在 try 块中。
第二个文件已写入,但当我检查文件时,它似乎已损坏或未成功写入数据。第一张图总是好的。
我尝试了几件事,发现了一种似乎有效的方法,但我不明白为什么。我在创建第二个写入流之前添加了这段代码:
将第二个写入流的代码放在 on-end 回调块中并没有什么区别,但是,如果我将代码留在块之外,在第一个写入流代码和第二个写入流代码之间,那么它可以工作,并且两个文件都已成功写入。
让代码保持原样感觉不对。有没有更好的方法可以写第二个缩略图?在第一个写入流写入数据后,我尝试使用 Sharp 模块读取文件,然后创建它的较小版本,但它不起作用。该文件似乎从未准备好使用。
javascript - 使用axios收到403错误时如何阻止writestream创建文件
我正在使用 axios 下载图像并将它们保存在本地。我从https://stackoverflow.com/a/61269447/7468791获取了以下答案,该答案适用于较大的图像,以确保它们在写入之前已完全下载。
但是,某些图像 url 返回 403 错误。我仍然得到为这些创建的图像文件,尽管是一个空文件。我如何调整代码,以便如果 get 请求收到 403 错误,它不会尝试编写任何内容?
}
node.js - WriteStream nodejs出内存
我尝试创建一个 20MB 的文件,但它抛出了内存错误,将 max-old-space-size 设置为 2gb,但仍然有人可以向我解释为什么写一个 20mb 的流会消耗这么多内存?
我有 2.3 GB 的可用内存
node.js - 如何等待stream.write()的循环结束
我正在使用 Node 的 fs.WriteStream 将数据写入文件。我正在遍历一个对象数组并使用write()函数写入每个对象。
问题是我想知道一旦这个循环结束并且所有的write()调用都完成了,但我不能让它工作。
我尝试了一些解决方案,例如不使用流,但这会产生其他问题。我上次尝试的解决方案是检查循环是否是最后一项,如果是,则关闭、结束或销毁流。
这些都不起作用。该事件是在文件实际写入之前发出的。
下面是我的代码,我很感激我能得到的任何帮助。非常感谢。