【问题标题】:Use NodeJS to upload file in an API call使用 NodeJS 在 API 调用中上传文件
【发布时间】:2016-02-15 07:33:11
【问题描述】:

我正在考虑使用 NodeJS 作为服务器来构建 API。

理想情况下,我希望有一个 API 端点来发送一组信息以及一个可以保存到文件系统的文件。

我见过的大多数示例都是通过表单发送文件,但我想通过发布请求来执行此操作。

有谁知道我如何做到这一点(如果可能的话)?

目前我想要实现的目标大致如下:

app.post('/Some/Endpoint/', controller.handleSomeEndpoint, function(request, response) {
    response.send('Finished Request');
});

exports.handleSomeEndpoint = function(request, response, next) {
    var bodyarr = []
    request.on('data', function(chunk){
      bodyarr.push(chunk);
    })
    request.on('end', function(){
      console.log( bodyarr.join('') );
    })
}

但是,如果我按照以下方式运行 curl 命令,则永远不会调用数据和结束:

curl http://127.0.0.1:5000/Some/Endpoint/ -F 'test=@test_file'

干杯, 马特

【问题讨论】:

  • 发送文件时,表单是 POST 请求。事物的节点端不应该有任何不同。
  • 但是如何在没有表单的情况下创建 req.files 呢?有什么例子吗?

标签: node.js


【解决方案1】:

答案似乎是 expressJS 没有使用与 nodejs 中的 http 模块相同的处理 post 文件的方法。

所需要的只是包含要写入的文件的目录:

app.use(express.bodyParser({uploadDir:'./uploads'}));

我在这里找到的:

http://www.hacksparrow.com/handle-file-uploads-in-express-node-js.html

【讨论】:

  • 这样,每当我通过 POST 请求向您发送文件时,您都会接受它并保存在您的 ./uploads 中。我认为它不安全。
  • 我不认为这是不安全的,因为它是临时存储,而不是永久存储,这意味着当它被接受时,并不意味着它被永久存储或使用。该请求应该经过身份验证(在我的情况下是这样)。
  • 但是如果没有使用表单,如何传递 req.files?我正在尝试仅通过 API 上传文件。
【解决方案2】:

我建议你使用Formidable 来避免匿名文件上传。

【讨论】:

    【解决方案3】:

    您的代码应该可以正常工作;这是错误的 curl 用法。试试这个:

    $ curl -X POST --data-binary @test_file http://localhost:8080
    

    【讨论】:

      猜你喜欢
      • 2020-06-22
      • 2017-03-29
      • 2017-11-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-03
      • 2011-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多