【问题标题】:Create File object without saving创建文件对象而不保存
【发布时间】:2021-01-27 05:07:18
【问题描述】:

我正在尝试寻找一种方法来创建 .txt 文件对象而不将其保存到磁盘 Node.js 中。在浏览器中我会做类似的事情

new File(['file_contents'], 'file_name.txt', {type: 'text/plain'})

最终目的是为我的 Discord Bot 临时创建一个 .txt 文件对象以作为消息附件发送。

根据discord.js 文档,我认为我应该创建一个代表文件的BufferStream 对象。

我已经在使用 require('node-fetch') 库来阅读邮件中的附件,如果这有任何相关性(但在他们的文档中也看不到任何内容)。

【问题讨论】:

  • 在这里谷歌搜索/搜索不走运 --- 所有解决方案都涉及读取现有文件/制作它们只是为了保存到光盘。将不胜感激提供有关如何执行此操作的示例/文档的链接。最好使用一种不需要更多库的方法(例如,只编写表示文本文件的 Buffer 文字),但我理解这样的解决方案是否过于复杂。
  • 我添加了一个与将文件保存到磁盘有关的答案,一旦您完成发送,您可以随时删除该文件。请问你为什么不想把它保存到磁盘上?
  • 因为我认为这不是必需的 - 它与 File Web API 无关?我假设写入磁盘然后必须清理之后的效率低于创建对象然后丢弃它。
  • 在 Typescript 中,您可以创建一个 File 对象,而无需将文件保存在本地文件夹中。新文件([JSON.stringify(''content)],'metadata.json')
  • dush,这听起来很棒 - 但是您从哪里导入文件类型?它不是 ts-node 内置的。

标签: javascript node.js file discord.js


【解决方案1】:

在控制台中玩耍后,我发现Buffer.from('string of txt file contents') 代表文件似乎工作正常。

用法:

channel.send(new Discord.MessageAttachment(Buffer.from('Hello World'), 'file_name.txt'))

【讨论】:

  • 请让我知道这是否有缺点,因为我不熟悉使用缓冲区 --- 它在我看来在表面上工作得很好。
【解决方案2】:

要在 JS 中编写文本文件,您应该使用 Node.js 中包含的 fs 库。

这是一个写入文件的例子:

fs = require('fs');

let content = "Hello world!";

fs.writeFile('file.txt', content, function (err) {
    if (err) return console.log(err);
    // Code here will execute if successfully written
});

然后,为了将本地文件发送到 Discord,您可以使用 .send 和其中包含 files 属性的对象,如下所示:

channel.send({
    files: [{
        attachment: 'entire/path/to/file.txt',
        name: 'file.txt'
    }]
}).then(() => {
    // Delete file
    fs.unlink('file.txt');
});

你可以看到更多关于.send()here的信息,你可以找到更多关于fs模块here的信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多