使用Node.js(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

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

来自分类Dev

使用JFileChooser选择文件

来自分类Dev

如何使用Javascript选择文件?

来自分类Dev

如何使用Zenity文件选择

来自分类Dev

如何使用硒选择文件

来自分类Dev

使用 Python 自动选择文件

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

Node.js使用fs.readFileSync读取大文件

来自分类Dev

在Node JS中使用fs-extra更新xml文件

来自分类Dev

Node.js:使用fs.writeFileSync写入系统文件

来自分类Dev

无法使用fs Node.js读取文件

来自分类Dev

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

来自分类Dev

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

来自分类Dev

无法使用node.js从Electron应用程序使用xhr从文件系统上载1GB的文件(硬编码文件不使用输入类型文件)

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

使用grep查询选择性文件

来自分类Dev

在Android中使用Intent选择PDF文件

来自分类Dev

使用FileDialog选择文件名

来自分类Dev

使用Google Picker选择文件夹

来自分类Dev

使用属性文件是安全的选择吗?

来自分类Dev

使用watir-webdriver选择本地文件

来自分类Dev

使用Google Picker选择文件夹

Related 相关文章

  1. 1

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

  2. 2

    使用JFileChooser选择文件

  3. 3

    如何使用Javascript选择文件?

  4. 4

    如何使用Zenity文件选择

  5. 5

    如何使用硒选择文件

  6. 6

    使用 Python 自动选择文件

  7. 7

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

  8. 8

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

  9. 9

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

  10. 10

    Node.js使用fs.readFileSync读取大文件

  11. 11

    在Node JS中使用fs-extra更新xml文件

  12. 12

    Node.js:使用fs.writeFileSync写入系统文件

  13. 13

    无法使用fs Node.js读取文件

  14. 14

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

  15. 15

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

  16. 16

    无法使用node.js从Electron应用程序使用xhr从文件系统上载1GB的文件(硬编码文件不使用输入类型文件)

  17. 17

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

  18. 18

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

  19. 19

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

  20. 20

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

  21. 21

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

  22. 22

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

  23. 23

    使用grep查询选择性文件

  24. 24

    在Android中使用Intent选择PDF文件

  25. 25

    使用FileDialog选择文件名

  26. 26

    使用Google Picker选择文件夹

  27. 27

    使用属性文件是安全的选择吗?

  28. 28

    使用watir-webdriver选择本地文件

  29. 29

    使用Google Picker选择文件夹

热门标签

归档