使用Nodejs(fs)访问使用输入类型=文件选择的文件

安德鲁·沃利

我在读取其他位置(Node项目目录除外)中的文件时遇到麻烦。我需要读取一个私钥文件(可以位于文件系统上的任何位置),并通过sftp传输一些yaml / yml文件(也可以位于任何位置)。这些文件在文件输入字段中选择,可以通过我的index.js(在Node中)中的post方法访问。问题是,当我尝试读取文件时,出现错误消息,指出该文件不存在,特别是因为该目录默认为Node项目目录。

例如:
D:/ path / to / Node / project
D:/ this / is / where / the / keyis

它将尝试读取此文件:
D:/ path / to / Node / project / keyis

我不确定为什么只得到文件名。我知道接收整个路径会带来安全风险,但是即使在任何阶段都没有打印出来,我还是需要该路径。

这是html表单的代码:

<form id="file-upload" name="uploadform" method="post" action="/upload" onsubmit="update()">
    <input type='text' id='username' class="btn btn-lg btn-default" name='username' placeholder='Enter Username' style="color:#000"><br>
    <h3>Select Key:</h3><input type='file' id='key-select' name='keySelect'><br>
    <h3>Select Yaml:</h3><input type="file" id="file-select" name="yamlfiles[]" multiple accept=".yml, .yaml"/><br>
    <button type="submit" class="btn btn-lg btn-default" id="upload">Upload Data</button>
</form>

然后在index.js中:

router.post('/upload', function(req,res) {
// Create a new connection
var fs = require('fs');
var Connection = require('ssh2');
var c = new Connection();
// Get the files to be uploaded
var files = req.body.yamlfiles;
var uname = req.body.username;
var key = req.body.keySelect;
...
...
c.connect(
    {
        host: 'some_host',
        port: 22,
        username: uname,
        privateKey: fs.readFileSync(key)
    }
);

除非项目路径中没有“键”,否则readFileSync本质上不起作用。有什么我想念的吗?“文件”也会发生同样的情况。

安德鲁·沃利

好吧,我似乎已经解决了自己的问题。对于将来遇到此问题的任何人,我都会给我的解决方案做一个粗略的概述。

我需要在enctype="multipart/form-data"表单中添加:我以前曾经尝试过,但是我不明白我需要在服务器端进行哪些更改。使用nodejs模块:https : //github.com/andrewrk/node-multiparty我可以将表单数据解析为可读对象。然后,我的服务器端代码变成了这样的东西:

router.post('/upload', function(req,res) {
// Create a new connection
var fs = require('fs');
var multiparty = require('multiparty');
var util = require('util');
var Connection = require('ssh2');
var c = new Connection();
// Get the files to be uploaded
var form = new multiparty.Form();
form.parse(req, function(err, fields, files) {
    // Each element of the object is an array
    console.log("form parsed");
    // yamlfiles is an array anyway
    var yamlfiles = files.yamlfiles;
    // username is just a text field, so the 0th element is username
    var uname = fields.username[0];
    // files is a single file, so the 0th element is my key
    var key = files.keySelect[0];
    ...
    ...
    // access key with key.path (will be a fakepath)
    fs.readFileSync(key.path);
    // access name with key.originalFilename
    console.log(key.originalFilename);

经过一番摆弄之后,它可以完美运行。我希望这对将来会遇到此问题的其他人有所帮助,并非常感谢那些为我提供帮助的人。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Node.js(fs)访问使用输入类型=文件选择的文件

来自分类Dev

使用JFileChooser选择文件

来自分类Dev

使用 VBA 从选择文件中输入数据

来自分类Dev

使用SaveImage()时如何选择文件类型

来自分类Dev

角度输入文件:选择相同的文件

来自分类Dev

如何使用Javascript选择文件?

来自分类Dev

如何使用Zenity文件选择

来自分类Dev

如何使用硒选择文件

来自分类Dev

使用 Python 自动选择文件

来自分类Dev

使用nodejs fs同时读取文件

来自分类Dev

使用选择文件和选择文件表(如在 NSOpenPanel 中)

来自分类Dev

选择选项上的输入类型文件

来自分类Dev

选择并打开文件后输入类型文件事件

来自分类Dev

样式输入类型文件中未选择文件消息

来自分类Dev

从SaveFileDialog获取选择的文件类型

来自分类Dev

如何限制用户不要使用带有React和TypeScript的输入类型文件来选择其他文件类型?

来自分类Dev

使用Tkinter选择文件,然后使用Matplotlib绘制文件

来自分类Dev

Xamarin 使用 FilePicker 使用按钮选择文件

来自分类Dev

hadoop在输入文件夹中选择输入文件

来自分类Dev

使用输入文件选择循环-动态输出以读取

来自分类Dev

没有使用 Homestead 选择输入文件

来自分类Dev

如何使用 csv 文件的列名作为输入选择?

来自分类Dev

使用php选择文件上的angularjs文件上传

来自分类Dev

使用语句选择某些文件(组合文件)VBA

来自分类Dev

在选择文件后使用Android找不到文件

来自分类Dev

使用文件对话框从函数中选择文件

来自分类Dev

使用 intent.getContent 方法仅选择特定文件类型

来自分类Dev

如何使用 os.listdir 仅选择文件类型?

来自分类Dev

Windows Phone,使用PickSingleFileAndContinue或PickMultipleFilesAndContinue选择文件

Related 相关文章

  1. 1

    使用Node.js(fs)访问使用输入类型=文件选择的文件

  2. 2

    使用JFileChooser选择文件

  3. 3

    使用 VBA 从选择文件中输入数据

  4. 4

    使用SaveImage()时如何选择文件类型

  5. 5

    角度输入文件:选择相同的文件

  6. 6

    如何使用Javascript选择文件?

  7. 7

    如何使用Zenity文件选择

  8. 8

    如何使用硒选择文件

  9. 9

    使用 Python 自动选择文件

  10. 10

    使用nodejs fs同时读取文件

  11. 11

    使用选择文件和选择文件表(如在 NSOpenPanel 中)

  12. 12

    选择选项上的输入类型文件

  13. 13

    选择并打开文件后输入类型文件事件

  14. 14

    样式输入类型文件中未选择文件消息

  15. 15

    从SaveFileDialog获取选择的文件类型

  16. 16

    如何限制用户不要使用带有React和TypeScript的输入类型文件来选择其他文件类型?

  17. 17

    使用Tkinter选择文件,然后使用Matplotlib绘制文件

  18. 18

    Xamarin 使用 FilePicker 使用按钮选择文件

  19. 19

    hadoop在输入文件夹中选择输入文件

  20. 20

    使用输入文件选择循环-动态输出以读取

  21. 21

    没有使用 Homestead 选择输入文件

  22. 22

    如何使用 csv 文件的列名作为输入选择?

  23. 23

    使用php选择文件上的angularjs文件上传

  24. 24

    使用语句选择某些文件(组合文件)VBA

  25. 25

    在选择文件后使用Android找不到文件

  26. 26

    使用文件对话框从函数中选择文件

  27. 27

    使用 intent.getContent 方法仅选择特定文件类型

  28. 28

    如何使用 os.listdir 仅选择文件类型?

  29. 29

    Windows Phone,使用PickSingleFileAndContinue或PickMultipleFilesAndContinue选择文件

热门标签

归档