我的节点项目文件夹中有一个.png文件,我想读取该文件并将其发送到远程REST api,该api接受表单数据格式并在将其上传到S3后返回图像url。
我以前使用JavaScript在前端使用相同的api上传图像。在我的JS应用程序中,我使用输入类型的文件上传图像,该图像以文件格式提供给我,然后在将该文件添加到formData对象中后,将其传递给api,如下所示:
let formData = new FormData();
formData.append("content_file", file)
但是当我尝试在node.js中执行相同操作时,由于Api不接受请求主体,因此我无法将该文件读取为文件格式。 我是Node js的新手,我什至不确定我是否以正确的方式读取文件。请帮忙!
var express = require('express');
var fs = require('fs');
var path = require('path');
var Request = require("request");
var FormData = require('form-data');
var app = express();
// for reading image from local
app.get('/convertHtml2image1', function (req, res) {
fs.readFile(`image_path`, (err, data) => {
if (err) res.status(500).send(err);
let extensionName = path.extname(`banner.png`);
let base64Image = new Buffer(data, 'binary').toString('base64');
let imgSrcString = `data:image/${extensionName.split('.').pop()};base64,${base64Image}`;
// for converting it to formData
let formData = new FormData();
formData.append("content_file", data)
// for calling remote REST API
Request.post({
"headers": { "token": "my_token" },
"url": "api_url",
"body": formData
}, (error, response, body) => {
if (error) {
return console.log(error);
}
let result = JSON.parse(body)
res.send("image_url: " + result.url)
});
})
})
app.listen(5000);
答案 0 :(得分:0)
据我了解,您尝试在Nodejs中创建Blob。它没有定义,但基本上是带有文件信息的arraybuffer。也许,您可以使用外部npm软件包使其成为斑点。 Check this
答案 1 :(得分:0)
使用fs.createReadStream()而不是fs.readFile()而不在文件流中上传图像,首先读取文件,然后将其添加到formData,然后上传(或将其发送到api),因为不是文件,而是正在将视频流上传到这里。
var express = require('express');
var fs = require('fs');
var path = require('path');
var Request = require("request");
var FormData = require('form-data');
var app = express();
app.get('/convertHtml2image', function (req, res) {
var formData = {
name: 'content_file',
content_file: {
value: fs.createReadStream('banner.png'),
options: {
filename: 'banner.png',
contentType: 'image/png'
}
}
};
Request.post({
"headers": {
"Content-Type": "multipart/form-data",
"token": my_token
},
"url": api_url,
"formData": formData
}, (error, response, body) => {
if (error) {
return console.log("Error: ", error);
}
let result = JSON.parse(body)
res.send("image_url: " + result.url)
});
})
app.listen(5000);