使用 Multer 将 csv 文件上传到 Node.js 时出现意外字段

Posted

技术标签:

【中文标题】使用 Multer 将 csv 文件上传到 Node.js 时出现意外字段【英文标题】:Unexpected field occurs while uploading csv files to Node.js using Multer 【发布时间】:2019-01-30 06:05:00 【问题描述】:

我正在使用 Node.js、Vue 和 Multer 开发文件上传功能。

这里是用 Vue.js 编写的前端代码

export default 
	data()
		return
      selected: "How do you want to input the data?",
      options: [
           id: 1, name: 'Choose from file system' ,
           id: 2, name: 'Choose from an API' ,
           id: 3, name: 'Choose from a Database' 
      ],
      files: []
		
  ,

  methods: 
      submitFiles()
        
        let formData = new FormData();
        let url = axios.defaults.baseURL;

        for( var i = 0; i < this.files.length; i++ )
          let file = this.files[i];
          formData.append('files[' + i + ']', file);
        

        axios.post( `$url/select-files`,
          formData,
          
            headers: 
                'Content-Type': 'multipart/form-data'
            
          
        ).then(function(response)
          console.log('SUCCESS!!');
          console.log('The response object is '+response);
        )
        .catch(function()
          console.log('FAILURE!!');
        );
      ,

      handleFilesUpload()
        let uploadedFiles = this.$refs.files.files;

        for( var i = 0; i < uploadedFiles.length; i++ )
          this.files.push( uploadedFiles[i] );
        
        console.log(this.files);
      
  
<div id="app" class="ui equal width left aligned padded grid stackable">
  
    <div>

      <div v-if="selected === 1">
      
        <div class="large-12 medium-12 small-12 cell">
          <input type="file" id="files" ref="files" v-on:change="handleFilesUpload()"/>
          <div v-if="this.files.length > 0" class="ui small basic icon buttons">
            <button class="ui button" v-on:click="submitFiles()">
              <i class="upload icon">
              </i>Upload
            </button>
            
          </div>
        </div>

    
        <br>
      </div>

    </div>

	</div>

这是用 Node.js 编写的代码

// For cross origin resource sharing
app.use(function(req, res, next) 
    res.header('Access-Control-Allow-Origin', 'http://localhost:8080');
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    res.header('Access-Control-Allow-Headers', 'Content-Type, Set-Cookie, *');
    res.header('Access-Control-Allow-Credentials', 'true');
    next();
)

const multer = require('multer');
let upload = multer();
app.post('/select-files', upload.single('files'), async(req, res) => 
    try 
        console.log(req.file);
     catch (err) 
        res.sendStatus(400);
    
)

当我尝试使用 Postman 测试上述代码时,出现以下错误,

我需要访问从客户端发送的完整文件。我不知道我做错了什么。有人可以帮帮我吗?

【问题讨论】:

【参考方案1】:

附加到formData 的名称必须与upload.single() 中的文件名相同。

所以你必须将formData.append('files[' + i + ']', file);替换为formData.append('files', file);才能上传单个文件。

【讨论】:

以上是关于使用 Multer 将 csv 文件上传到 Node.js 时出现意外字段的主要内容,如果未能解决你的问题,请参考以下文章

Multer 没有将文件上传到服务器

使用 Multer 上传文件并在解析和上传到数据库之前将其短暂存储在内存中

我无法将文件上传到我使用 node js multer 指定的目录

如何将multer保存在内存中的文件上传到另一个API

在 Express Node js 中使用 multer sftp 将文件上传到远程服务器?

将所有multer上传的文件移动到Nodejs中的新目的地