标签: fs

使用nodejs下载后删除文件

我正在使用Node.js,我需要在用户下载后删除文件.有没有办法在管道进程结束后调用回调方法,或为此目的的任何事件?

exports.downloadZipFile = function(req, res){
    var fileName = req.params['fileName'];
    res.attachment(fileName);
    fs.createReadStream(fileName).pipe(res); 

    //delete file after download             
};
Run Code Online (Sandbox Code Playgroud)

javascript fs node.js

10
推荐指数
1
解决办法
6483
查看次数

在电子中打开本地文件并在wavesurfer.js中渲染

我正在开发一个用电子构建的应用程序,它应该与wavesurfer.js一起显示表示音频文件的波形.但是,我无法使用fs模块打开文件,并通过Blob将文件内容推送到waveurfer.文件加载,一切似乎都有效,但解码waveurfer说Error decoding audiobuffer.

我想的两件事可能会影响到这一点:

  • fs.readFile函数将编码作为第二个参数
  • Blob构造函数将选项对象作为第二个参数,在此您可以通过type属性定义mimetype

但是,到目前为止,这两种方法都无法解决问题.

我希望有人有解决方案.(也可能是fs.readFile功能完全是错误的方式,有一个更好的方式;我只是寻找一个相对高效的方式打开文件,任何帮助表示赞赏)干杯!

这是代码......

(我要省略所有的电子样板,你可以通过这样做轻松搞定git clone https://github.com/sindresorhus/electron-boilerplate/) - 在脚本中加入一个脚本标签,main.js在html中的某个地方index.html添加一个div,wave-area并将一个脚本标签添加到wavesurfer.js库中.您还需要演示wav文件的本地副本.

然后在main.js文件中......

var fs = require('fs');

var wavesurfer = Object.create(WaveSurfer);
wavesurfer.init({
  container: '#wave-area'
});

fs.readFile('/path/to/demo.wav', function(err, data) {
  if (data && !err) {
    console.log('has data and no error!');
  }
  var file = new window.Blob([data]);
  wavesurfer.loadBlob(file);
}

wavesurfer.on('loading', function(e) {
  console.log('loading', e);
});

wavesurfer.on('error', …
Run Code Online (Sandbox Code Playgroud)

javascript fs readfile electron

10
推荐指数
1
解决办法
7378
查看次数

如何关闭文件夹的 fs.watch 侦听器

我有一个应用程序,它允许用户连续将本地文件夹的内容上传到云中的文件夹。该应用程序是用electronnode.js

所以我需要帮助的代码是这样的:

  fs.watch(getHomeDirectory(), (eventname, filename) => {
   upload(
    filename,
    `${getHomeDirectory()}/${filename}`
  );
})
Run Code Online (Sandbox Code Playgroud)

此函数作为按钮上的事件侦听器的一部分被调用。

有一个 gettergetHomeDirectory函数,用于获取文件夹的用户目录,然后upload是上传在该文件夹中添加或更改的文件的函数。

我想要这样,只要将文件添加或更改到目标目录中,应用程序就会不断上传文件。

现在它可以工作,但我希望用户能够关闭它,fs.watch以便他们停止收听文件夹。

我发现了这个堆栈溢出问题: NodeJS: unwatching a file and specified a listener。然而,这只涉及fs.watchFile当我尝试做同样的fs.watch事情时它没有用。

我不知道我需要做什么。

javascript fs node.js electron

10
推荐指数
1
解决办法
4091
查看次数

在fs.writeFile([option])中,"options parameter"通常如何工作?

我正在阅读有关Node.js文件系统的文档fs.writeFile(filename, data, [options], callback).所以我注意到我经常看到[选项],但从未用过任何东西.有人能举个例子吗?我所有的情况都没有使用这个选项.

fs node.js

9
推荐指数
2
解决办法
2万
查看次数

如果文件尚不存在,请创建该文件

我想创建一个文件foobar.但是,如果用户已经有一个名为的文件,foobar那么我不想覆盖他们的文件.所以我只想创建foobar它,如果它不存在.

起初,我认为我应该这样做:

fs.exists(filename, function(exists) {
  if(exists) {
    // Create file
  }
  else {
    console.log("Refusing to overwrite existing", filename);
  }
});
Run Code Online (Sandbox Code Playgroud)

然而,看着官方文档fs.exists,它读取:

fs.exists()是一种时代错误,只是出于历史原因而存在.几乎没有理由在你自己的代码中使用它.

特别是,在打开文件之前检查文件是否存在是一种反模式,使您容易受到竞争条件的影响:另一个进程可能会在调用fs.exists()和fs.open()之间删除该文件.只需打开文件并在错误处理时处理错误.

fs.exists()将被弃用.

很明显,节点开发人员认为我的方法是个坏主意.另外,我不想使用将被弃用的函数.

如何在不写现有文件的情况下创建文件?

javascript fs node.js

9
推荐指数
3
解决办法
1万
查看次数

如何读取节点js中的csv文件

我试图使用节点js读取csv文件.她是我的代码

fs.readFile(config.csvUploadPath, function read(err, data) {
    if (err) {
        throw err;
    }
    console.log(data + 'my data')
});
Run Code Online (Sandbox Code Playgroud)

安慰:

ID
D11
D33
D55
Run Code Online (Sandbox Code Playgroud)

在这里,我想获取列ID中的元素并将它们存储在数组中.我怎样才能做到这一点?谁能建议我帮忙.谢谢.我的控制器:

var partnersModel = new partners(params);
        fs.readFile(config.csvUploadPath, function read(err, data) {
            if (err) {
                throw err;
            }
        dataArray = data.toString().split(/\r?\n/);
            dataArray.forEach(function(v,i){
                if(v !== 'DUI'){
                  partnersModel.dui.push(v);
                }
            });
        });
        partnersModel.save(function(error, response){
Run Code Online (Sandbox Code Playgroud)

csv fs node.js express meanjs

9
推荐指数
2
解决办法
3万
查看次数

未收到数据时向 Node.js 流添加“静默帧”

我正在使用 Node.js 创建一个 Discord.js 机器人,该机器人在语音通道中记录用户的音频。它加入一个频道并开始分别收听每个用户的声音。它记录到 .pcm 文件(因此只有原始数据)。

现在,这可行了,但 Discord 音频流的性质导致了问题。从 Discord 的 API 获取的音频流仅在特定用户说话时发送数据,而不是在他们沉默时发送数据。这会导致用户说话的时刻被粘贴到彼此之后,而中间没有沉默。

举个例子,我讲5秒,然后停止讲5秒,然后再开始讲,依此类推。如果我这样做 1 分钟,我将得到一个只有 30 秒长的文件,因为 5 秒的静默没有记录在流中。

代码看起来像这样(这receiver是 Discord API 提供的语音连接,当我发出命令时流会任意结束):

const audioStream = receiver.createStream(user, {mode:'pcm', end:'manual'};
const outputStream = fs.createWriteStream('SOME_PATH');

audioStream.pipe(outputStream);

audioStream.on('end', () => {
    console.log('Ended stream')
});
Run Code Online (Sandbox Code Playgroud)

输出audioStream是 16 位小端 44100 Hz 流(因此仅当用户说话时)。

有没有办法可以用某种静默帧来填补数据空白?或者也许保持静默流运行并仅在数据进入时才将其放入?

pcm fs node.js discord.js createwritestream

9
推荐指数
1
解决办法
1092
查看次数

fs.existsSync 在电子中使用时不是函数

我正在使用Angular 10,Electron 10.0electron-builder v22.8.0.

启动 Electron 应用程序时,我在控制台中收到以下错误:

fs.existsSync is not a function when used in electron
    getElectronPath @ ./node_modules/events/events.js:6
    <anonymous> @ ./node_modules/events/events.js:17
    ./node_modules/electron/index.js @ ./node_modules/events/events.js:19
    __webpack_require__ @ ./webpack/bootstrap:79
    ./src/app/projectview/new/new.component.ts @ ./src/app/projectview/new/new.component.ts:1
    [...]
    at __webpack_require__ (bootstrap: 79)
Run Code Online (Sandbox Code Playgroud)

错误在这里弹出:

在此处输入图片说明

当我导入电子并在渲染器进程中有以下行时会发生这种情况:

fs.existsSync is not a function when used in electron
    getElectronPath @ ./node_modules/events/events.js:6
    <anonymous> @ ./node_modules/events/events.js:17
    ./node_modules/electron/index.js @ ./node_modules/events/events.js:19
    __webpack_require__ @ ./webpack/bootstrap:79
    ./src/app/projectview/new/new.component.ts @ ./src/app/projectview/new/new.component.ts:1
    [...]
    at __webpack_require__ (bootstrap: 79)
Run Code Online (Sandbox Code Playgroud)

nodeIntegrationtrue在创建BrowserWindow …

fs node.js electron angular

9
推荐指数
1
解决办法
2985
查看次数

NodeJS中如何将ReadableStream转换为ReadStream?

我正在使用 nodemailer 和 pdfmake 创建 pdf,并将其在电子邮件的附件中发送。我对 NodeJS 中的文件处理没有太多经验,而且我无法让它工作。

请参阅保存文件的示例。当我检查过类型时,createPdfKitDocument返回NodeJS.ReadableStream.

在 Nodemailer 中,我可以将附件包含为StreamReadable 查看文档。

但是,我无法在不保存附件的情况下发送附件,并给出文件的路径。

我试图按原样提供ReadableStream返回的内容,这导致了悬而未决的承诺。createPdfKitDocument我尝试用 包裹它Readable.from(),但没有成功。我尝试调用.read()结果,并没有导致悬而未决的承诺,但pdf无法打开。

有什么想法如何将 a 转换ReadableStreamReadable, or Buffer

buffer stream fs node.js

9
推荐指数
1
解决办法
6891
查看次数

带有 fs/promises 和 async..await 的堆栈跟踪

我有一个与此类似的问题,并在本期中进行了描述。与 async..await 一起使用时出现的错误中没有堆栈跟踪fs/promises,并且无法确定错误发生的位置。

鉴于应用程序:

foo.js

const { bar } = require('./bar');

async function foo() {
  await bar();
}


(async () => {
  await foo();
})().catch(console.error);
Run Code Online (Sandbox Code Playgroud)

酒吧.js

const fs = require('fs/promises');

exports.bar = async function bar() {
  await fs.readFile('some');
}
Run Code Online (Sandbox Code Playgroud)

当它像这样运行时node foo.js,这会导致没有堆栈跟踪的错误:

[Error: ENOENT: no such file or directory, open '...\some'] {
  errno: -4058,
  code: 'ENOENT',
  syscall: 'open',
  path: '...\\some'
}
Run Code Online (Sandbox Code Playgroud)

其中error.stack包含'ENOENT:没有这样的文件或目录,打开'...\some'。

当它像包node --stack_trace_limit=100 -r trace foo.js一样运行时trace,就像链接源中建议的那样,这会导致以下堆栈跟踪:

堆栈跟踪

请注意,内部条目呈灰色,可以过滤掉。 …

error-handling stack-trace fs node.js async-await

9
推荐指数
1
解决办法
1637
查看次数