【问题标题】:upload a file in Node.JS在 Node.JS 中上传文件
【发布时间】:2015-01-17 21:53:24
【问题描述】:

我正在使用multiparty 上传文件;我对 Node.JS 和流媒体很陌生;所以我的问题是,如果我像我在尝试的代码中所做的那样,通过在 form.parse() 中返回的 file.path 流式传输文件是否正确?我的意思是这是绝对路径,显然是在 localhost 上工作,因为它是我当前服务器 localhost 的绝对路径,但是当用户也尝试从他们的计算机上传文件时它会工作吗?

form.parse(req, function (err, fields, files) {
    var rs= fs.createReadStream(files.file[0].path);
    var fileDate;
    rs.on('readable', function () {
        while (null !== (chunk = rs.read())) {
            fileDate += chunk;
        }
    });

    rs.on('end', function () {
        console.log('importedData', fileDate);
    });
});

谢谢,如果您需要更多说明,请告诉我!

【问题讨论】:

    标签: javascript node.js express stream


    【解决方案1】:

    这看起来是正确的。默认情况下,上传的文件放在一个临时文件夹中,如果您使用的是 Linux,这可能是 /tmp,当您的用户通过您的前端上传文件时,他们的文件最终会放在同一个位置。

    【讨论】:

    • 谢谢你!但实际上我应该在前面提到,我并没有将文件完全上传到服务器;事实上,在前端用户是在表单数据中传递一个文件,而在后端我只是在读取文件并使用文件的数据,而不是将其存储在服务器的任何位置!与 POSTMAN 中的 form-data 完全一样,将文件作为文件格式传递,您可以在其中浏览和添加文件;因此,根据您的描述,临时文件仍将自动存储在服务器(即 Linux 环境)中的 /tmp 之类的地方,对吗?和 file.path 应该工作?正确的?再次感谢
    • @user3399784 multiparty 允许您添加filefield 事件以获取表单数据,而无需先保存到磁盘。这也要求您不要将回调传递给form.parse()
    • @mscdex 如果我现在理解正确,我在form.parse() 中使用回调,我将文件保存在磁盘上,对吗?虽然我的代码有效,因为数据将保存在服务器上的硬盘上,并且 file.path 在我的示例代码中有效,但这不是推荐的方式,我应该避免将文件保存在硬盘上,对吗?
    • @mscdex 所以我想知道我是否不使用form.parse() 中的回调将文件保存在临时位置,读取文件的正确方法是什么,我认为读取文件我需要传递路径(对不起,我是 Node.JS 的新手),如果文件没有保存在硬盘上并且我没有路径,你能帮我如何读取文件吗?换句话说,有没有办法将流传输到form.on('part',function(part) {... 中的变量?非常感谢!!!
    猜你喜欢
    • 2011-08-24
    • 2022-10-07
    • 2018-06-02
    • 2016-02-14
    • 2013-05-12
    • 1970-01-01
    • 2017-12-03
    • 2016-08-23
    相关资源
    最近更新 更多