【问题标题】:Multer upload file + JSON objectMulter 上传文件 + JSON 对象
【发布时间】:2016-03-15 21:57:23
【问题描述】:

是否可以使用 multer 向包含数据的文件和 json 对象另外发送? 我找到了this 线程。但它只说明了如何同时附加一个字段。

这是我目前在客户端的:

request
  .post(uploadPOSTUrl)
  .set('Accept', 'application/json')
  .field('Test', object.TestField)
  .attach('file', file)
  .end((err, res) => {
    if (err) {

    } else {

    }
  });

和服务器端

 export function upload(req, res){
    console.log("UploadedJSON: ", req.body);
    console.log("UploadedFile: ",req.file); 
    res.status(204).end();
}

但不仅仅是发送 1 个字段。我需要发送整个对象.field('Test', object)。当我这样做时,我在服务器端收到[Object object] 并且无法访问这些字段。

我现在唯一的解决方案是循环并为我的对象中的每个字段添加.field()...

【问题讨论】:

    标签: javascript express file-upload http-post superagent


    【解决方案1】:

    您的客户端代码看起来使用了 SuperAgent 库,对吗?如果是这样,真正的问题是如何使用 SuperAgent 发送多部分请求,因为 multer 只处理多部分/表单数据。

    SuperAgent documentation for multipart requests 显示你的做法是重复.field() 方法:

     request
       .post('/upload')
       .field('user[name]', 'Tobi')
       .field('user[email]', 'tobi@learnboost.com')
       .attach('image', 'path/to/tobi.png')
       .end(callback);
    

    【讨论】:

    • 所以除了重复 .field() 没有别的办法吗?是的,我正在使用 SuperAgent,但由于我上传了一个文件,我认为 multer 应该对此负责。
    • 文档还显示了一个接受对象的.send() 方法,但我没有看到任何关于将.send() 方法与multipart/form-data 一起使用的信息。您可以尝试使用.send(),也可以使用.set('Content-Type', 'multipart/form-data'),但我不知道它是否旨在以这种方式工作。试一试。
    • 好的,我将不得不重复 .field()。但既然你在这里,我试图下载那个上传的文件并保存它。用户应该在下载部分的浏览器中看到它。我找不到任何例子。我认为我搜索了错误的术语。你有什么想法吗?
    • multer docs 有一个很好的例子,它展示了如何开始这样做。
    • 下载我刚刚上传的文件?我找不到那个例子。能发一下直接链接吗?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-21
    • 2018-02-25
    • 2021-06-12
    • 2018-05-27
    • 2019-07-31
    • 2020-05-31
    • 1970-01-01
    相关资源
    最近更新 更多