使用NodeJS在API调用中上传文件

14

我希望使用NodeJS作为服务器来构建API。

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

大多数我看到的示例都是通过表单发送文件,但是我想通过POST请求实现这一点。

有人知道如何实现这个目标吗(是否可能)?

目前,我想实现类似于以下内容:

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'

祝好,Matt


1
一个表单在发送文件时是一个POST请求。节点端的事情不应该有任何不同。 - Paul
1
但是如何在没有表单的情况下创建req.files?有任何示例吗? - Bagusflyer
3个回答

5

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

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

0

你的代码应该没问题,问题在于curl的使用方法不正确。尝试使用以下代码:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接