我正在构建一个新闻门户应用程序,这种应用程序需要在其故事中上传文件。我使用PostgreSQL作为数据库来存储来自门户的所有信息。
我想知道如何将通过快递收到的文件上传到我的PostgreSQL数据库中,我在互联网上搜索了很多,没有找到任何非常简单的东西。
那么,我如何才能以一种简单有效的方式做到这一点,以一种稍后可以在URL中提供此文件的方式?
这是我的包。json:
{
"name": "backend",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "nodemon",
"production": "pm2 start index.js --name knowledge-backend"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"bcrypt-nodejs": "0.0.3",
"body-parser": "1.18.3",
"busboy": "^1.6.0",
"consign": "0.1.6",
"cors": "2.8.4",
"express": "4.16.3",
"jwt-simple": "0.5.1",
"knex": "0.21.1",
"moment": "2.22.2",
"mongoose": "^7.1.2",
"multer": "^1.4.5-lts.1",
"node-schedule": "1.3.0",
"passport": "0.4.0",
"passport-jwt": "4.0.0",
"pg": "8.0.3",
"pm2": "3.0.4"
},
"devDependencies": {
"nodemon": "1.18.4"
}
}
这是我尝试过的:
const busboy = require('busboy')
module.exports = app => {
const save = (req, res) => {
try {
let bb = busboy({
headers: req.headers,
defCharset: "utf8"
});
let fields = {};
bb.on("field", (fieldname, val, fieldnameTruncated, valTruncated) => {
console.log(fieldname, val);
fields[fieldname] = val;
});
bb.on("file", (fieldname, fileStream, filename, encoding, mimetype) => {
console.log('File captured')
});
res.status(200).send()
} catch (err) {
console.log("file upload catch", err);
}
}
}
routes.js:
module.exports = app => {
app.route('/files')
.post(app.api.file.save)
}
1条答案
按热度按时间zyfwsgd61#
看看这个文件,它有三个功能,一个保存,一个通过id获取文件,一个通过id删除文件:
此文件是一个Node.js模块,包含使用Express将文件上传到PostgreSQL的函数。它定义了三个功能:保存、getById和remove,它们被导出用于代码的其他部分,您可以将这些函数直接链接到路由中:
保存函数是使用busboy库(因为它已经被使用)来解析HTTP请求并从文件中提取数据,然后使用Node.js的fs模块将文件临时保存在操作系统上,使用path和os模块获得文件的临时路径,从文件系统读取文件的内容,然后使用knex.js的insert函数将其插入PostgreSQL数据库。在插入到数据库中之后,使用fs模块的unlink函数删除临时文件。
getById函数负责通过文件ID从数据库中获取文件,但如果愿意,也可以将其修改为通过文件名获取文件。它将ID作为请求URL中的参数,并执行数据库查询以检索文件的内容。内容作为请求响应返回,其中Content-Type报头设置为application/octet-stream,指示内容是字节流。
remove函数负责根据文件ID从数据库中删除文件。它将ID作为请求URL中的参数,并对数据库执行删除操作。