如何通过Node将文件上传到Web服务并将响应保存为文件

时间:2015-10-30 04:44:05

标签: javascript node.js express node-request

我一直在Node.js中搜索和测试各种模块/方法,目的是能够将文件上传到我的供应商API,并将响应数据(这是一个.png文件作为二进制数据发送)保存到图像文件。大多数示例演示了如何将文件上载到Web目录,而不是Web服务。 Formidable(https://github.com/felixge/node-formidable)是一个很容易存储在Web目录中的例子,但我不知道如何将一个简单的表单数据发布到Web服务。

我已经研究过使用请求(https://github.com/request/request)来发布文件,但是对于在表单示例中放置什么感到困惑,特别是在这里:

// Pass a simple key-value pair
my_field: 'my_value',

我目前的尝试是使用强大和请求的混合,但它失败并出现以下错误:

  

TypeError:无法读取属性' hasOwnProperty'为null

我的HTML表单如下:

<form action="/upload4" method="post" enctype="multipart/form-data">
<input type="file" name="myfile" />
<input type="submit" value="Upload" />
</form>

这是我的节点/强大/请求代码:

app.post('/upload4', function (req, res) {
    var form = new formidable.IncomingForm();
    form.parse(req, function (err, fields, files) {
        var options = {
            contentType: files.myfile.type,
            metadata: { fileName: files.myfile.name }
        };
        request.post({ url: 'http://myendpoint.net/uploadPDF', formData: form }, function optionalCallback(err, httpResponse, body) {
            if (err) {
                return console.error('upload failed:', err);
            }
            console.log('Upload successful!  Server responded with:', body);
            var options = { contentType: 'image/png' };
            blobSvc.createBlockBlobFromText(containerName, 'Reponse.png', body, options, function (error, result, response) {
        if (!error) {
            // Response from POST was uploaded to Azure as a PNG file
            res.send(result);
        } else {
            console.log(error);
        }
    });
        });
    console.log(req);
});

此时,我很高兴能够使用Node发布文件,最终目标是能够将响应(png文件)保存到Azure。

0 个答案:

没有答案