【问题标题】:Why am I NOT able to upload files with the following NodeJS code?为什么我无法使用以下 NodeJS 代码上传文件?
【发布时间】:2021-05-11 12:48:47
【问题描述】:

我正在尝试在 NodeJS 中设计一个简单的应用程序,该应用程序通过 HTML 表单上传 CSV 文件。 仔细阅读了YouTube 上关于如何使用 NodeJS 上传文件的教程后,我不明白为什么我的代码无法上传任何文件。我在 youtube 教程中还没有超过 6:53 分钟。

在下面找到我的简单代码:

const express = require('express');
const app = express();
const multer = require('multer');    

const fileStorageEngine = multer.diskStorage({
    destination: (req,file,cd)=> {
    cd(null, './uploads')   
    },
    filename: (req,file,cb)=>{
    cb(null, Date.now() + '--' + file.originalname);
    },
});

const upload = multer({storage: 'fileStorageEngine'});

app.get('/', (req,res)=> {
    res.sendFile(__dirname +'/testDir/form.html' );
});

app.post('/uploads', upload.single('file'), (req, res)=> {
    console.log(req.file);
    res.send('Single File Upload Success!');
});
    
app.listen('3600', ()=> console.log('App is listening...')); 

...我的 HTML 表单代码如下所示:

http://localhost:3600/ 正确显示

我可以浏览到我选择的任何文件,然后单击将我定向到的提交按钮:

根据YouTube 在 6:53 分钟,uploads 文件夹现在应该包含上传的文件, 但是,文件夹是空的!

另外,终端显示

...建议console.log(req.file); 实际上没有读入任何文件。

我也尝试过使用 postman,这是结果的屏幕截图:

我尝试重新观看视频并仔细按照说明进行操作,但仍然无法解决问题。

请帮助我了解上传失败的原因以及如何解决此问题。 期待您的帮助。

【问题讨论】:

  • 问题可能涉及您在form.html 上的客户端javascript/html...您可以编辑您的问题以包含它吗?至少,查看您的form 标记以及与表单提交相关的任何 javascript 事件(例如提交按钮单击事件、表单提交事件等)会有所帮助
  • @David784 哦,对不起!我也想发这个,但是没想到。如您所见,没有任何客户端 javascript 事件链接到表单。

标签: node.js express multer-gridfs-storage


【解决方案1】:

您已将storage 字段设置为string 而不是multer.diskStorage 对象。

改成:const upload = multer({storage: fileStorageEngine});

还要确保 Postman 表单数据中的 key 值设置为 file,因为您使用的是 upload.single('file')

【讨论】:

  • 感谢您的提示!正如你所建议的,我改为'const upload = multer({storage: fileStorageEngine});'但仍然无法正常工作。同样在邮递员中,点击发送后,我得到:无法 POST/
  • 在您的form.html 文件中,input 类型为file 的标签必须将id(和名称)作为“文件”,因为这是您在upload.single() 中传递的内容。这是CodeSandbox 供您参考。此外,在 Postman 中,您的 POST 请求必须发送到“localhost:3600/uploads”。
【解决方案2】:

确保您的 html 表单中有 enctype="multipart/form-data"。另外,请确保您已正确设置名称。您也可以粘贴表单的代码吗?

【讨论】:

  • 抱歉,我无意中发布了 html 表单。但是 enctype 已经设置为正确的类型:'enctype="multipart/form-data" '
猜你喜欢
  • 2015-01-02
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
  • 2022-08-12
  • 1970-01-01
相关资源
最近更新 更多