首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Multer无法在Express 4中获取上传表单数据

Multer无法在Express 4中获取上传表单数据
EN

Stack Overflow用户
提问于 2015-11-17 13:13:49
回答 1查看 1.6K关注 0票数 0

我使用Ajax上传表单数据。穆特(req.file,req.body)的输出总是undefined/{}

我的服务器代码:

代码语言:javascript
复制
import multer from 'multer';
import post from './router/api_post';

var upload = multer({dest: 'uploads/'});

app.use('/api/post', upload.single('thumb') , post);

api_post路由器文件:

代码语言:javascript
复制
import express from 'express';
var router = express.Router();

router
    .post('/', (req, res, next) => {
        console.log("POST POST");
        var post = {};
        console.log(req.body);
        console.log(req.file);
    });

export default router;

req.body的输出是{},req.fileis的输出是未定义的。

我在浏览器端使用react并通过ajax上传数据:

代码语言:javascript
复制
  savePost(ev) {
    ev.preventDefault();
    var editor = this.refs.editorDom.getDOMNode();
    var ajaxReq = new AjaxRequest();
    var formData = new FormData();
    formData.append('post_id', this.state.post_id);
    formData.append('title', this.state.title);
    formData.append('author', this.state.author);
    formData.append('digest', this.state.digest);
    formData.append('content', editor.innerHTML);
    formData.append('content_source_url', this.state.content_source_url);
    formData.append('create_time', new Date());
    formData.append('thumb', this.state.thumb);
    ajaxReq.send('post', '/api/post', ()=>{
      if(ajaxReq.getReadyState() == 4 && ajaxReq.getStatus() == 200) {
        var result = JSON.parse(ajaxReq.getResponseText());
        if(result.ok == 1) {
          console.log("SAVE POST SUCCESS");
        }
      }
    }, '', formData);
  }

savePost()是按钮的事件侦听器的回调。我用强大的力量成功地上传了数据。我刚刚用穆特取代了那令人敬畏的人,但没能得到。

我没有设置内容类型属性。我在标题中发现它是, multipart/form-data; boundary=----WebKitFormBoundary76s9Cg74EW1B94D9

form的HTML是

代码语言:javascript
复制
<form id="edit-panel" data-reactid=".ygieokt1c0.1.0.1.0.1">
  <div id="title" class="form-group" data-reactid=".ygieokt1c0.1.0.1.0.1.0">
    <input type="text" class="form-control" name="title" value="" data-reactid=".ygieokt1c0.1.0.1.0.1.0.1">
  </div>
  <div id="author" class="form-group" data-reactid=".ygieokt1c0.1.0.1.0.1.1">
    <input type="text" class="form-control" name="author" value="" data-reactid=".ygieokt1c0.1.0.1.0.1.1.1">
  </div>
  <div id="thumb" class="form-group" data-reactid=".ygieokt1c0.1.0.1.0.1.2">
    <button class="btn btn-default" data-reactid=".ygieokt1c0.1.0.1.0.1.2.1">
      <input type="file" name="thumb" accept="image/*" data-reactid=".ygieokt1c0.1.0.1.0.1.2.1.0">
      <span data-reactid=".ygieokt1c0.1.0.1.0.1.2.1.1">UPLOAD</span>
    </button>
  </div>
  <div class="form-group" data-reactid=".ygieokt1c0.1.0.1.0.1.3">
    <textarea class="form-control" name="digest" rows="5" data-reactid=".ygieokt1c0.1.0.1.0.1.3.1"></textarea>
  </div>
  <div id="rich-text-editor" class="form-group" data-reactid=".ygieokt1c0.1.0.1.0.1.4">
    <div id="editor-div" class="form-control" contenteditable="true" data-reactid=".ygieokt1c0.1.0.1.0.1.4.1"></div>
  </div>
  <div id="content-source-url" class="form-group" data-reactid=".ygieokt1c0.1.0.1.0.1.5">
    <input type="text" class="form-control" name="content_source_url" value="" data-reactid=".ygieokt1c0.1.0.1.0.1.5.1">
  </div>
  <button class="btn btn-default" data-reactid=".ygieokt1c0.1.0.1.0.1.6">保存并提交</button>
</form>

我可以输出thumb,它是一个File{}对象。

谢谢你帮忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-18 12:04:06

最后,我发现问题是Content-Type

我使用this.request.setRequestHeader("Content-Type", postDataType);来设置Content-Type并将postDataType设置为'',然后头中的实际Content-Type, multipart/form-data; boundary=----WebKitFormBoundary76s9Cg74EW1B94D9,正如我在第一次提到的那样。

您可以看到在multipar/form-data前面有一个逗号和一个空格。我不知道这个逗号是从哪里来的。但是无论如何,当我去掉逗号和空格时,一切都很好!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33757872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档