node中图片文件上传方法总结(单个或多个图片文件上传)

一、下面这个博客说的挺好的,可以记录一下

express + multer 实现文件上传

我这里主要针对以上的博客内容说一下注意事项
  • 在前台想要获取到上传后图片的url资源需要在app.js文件里加上一句:
app.use(express.static(__dirname));

二、这一个是我参考文献总结的内容:

1、首先在package.json文件中导入以下三个依赖
"fs": "^0.0.1-security",
"multer": "^1.4.2",
"path": "^0.12.7",
2、然后在你的图片上传的js文件中导入这三个模块
var multer = require("multer");
var fs = require("fs");
let path = require('path');

3、后台服务器的代码

//----------------------这里是单个图片上传的begin-----------------
//上传图片
const upload = multer({
	dest: "tmp/"
});
// 接受客户端上传的图片
router.post("/upload", upload.single("singleFile"), async (req, res) => {
	let imgFile = req.file; //获取图片上传的资源
	var service_detail_id = req.body.service_detail_id
	var tmp = imgFile.path; //获取临时资源
	let ext = path.extname(imgFile.originalname); //利用path模块获取 用户上传图片的 后缀名
	// console.log('ext',ext);
	let newName = "" + (new Date().getTime()) + Math.round(Math.random() * 10000) + "" + ext; //给用户上传的图片重新命名 防止重名
	// console.log(newName)
	let newPath = "../public/images/" + newName; //给图片设置存放目录  提前给当前文件夹下建立一个   images文件夹  !!!!
	// console.log(newPath)
	let fileData = fs.readFileSync(tmp); //将上传到服务器上的临时资源 读取到 一个变量里面
	fs.writeFileSync(path.join(__dirname, newPath), fileData); //重新书写图片文件  写入到指定的文件夹下
	var notice_path = "http://127.0.0.1:3000/public/images/" + newName;
	var sql = `INSERT INTO room_img(img_url,room_id) VALUES(?,?)`
	await dataConnect(sql, [notice_path, service_detail_id], function(err, data) {
		if (err) {
			return console.log(err);
		}
		console.log("success");
	})
	res.send("写入图片成功!"); //上传成功之后  给客户端响应
})
//----------------------这里是单个图片上传的end-----------------

附上前台的测试请求代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<button type="button" onclick="ajaxQuery()">发送文件上传请求</button>
		<input type="file" name="file" id="user" multiple/>
		<img src="" id="tx_img">
		<script src="js/jquery.min.js" type="text/javascript" charset="utf-8"></script>
		<script type="text/javascript">
			function ajaxQuery() {
				console.log("开始进行ajax请求:")
				var fil = $("#user").get(0).files[0]
				var reader = new FileReader();
				reader.readAsDataURL(fil);
				reader.onload = function(f) {
					// var result = document.getElementById("result");
					// console.log(result)
					document.getElementById("tx_img").src = this.result;
				}
				console.log(fil)
				var formData = new FormData();
				formData.append("singleFile", fil);
				formData.append("service_detail_id", 11)
				$.ajax({
					url: "http://127.0.0.1:3000/upload", //请求的url地址
					dataType: "json", //返回格式为json
					contentType: false,
					processData: false,
					async: true, //请求是否异步,默认为异步,这也是ajax重要特性
					data: formData,
					type: "POST", //请求方式
					beforeSend: function() {
						//请求前的处理
					},
					success: function(req) {
						var user = req
						console.log(user)
						if (user.state == 200) {} else {}
						//请求成功时处理
					},
					complete: function() {
						//请求完成的处理
					},
					error: function() {
						//请求出错处理
					}
				});
			}
		</script>
	</body>
</html>

注意事项:前台请求的formData.append(“singleFile”, fil);的singleFile必须与后台的upload.single(“singleFile”)对应

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node.js Koa 框架,解析文件上传的 formData 通常使用 koa-body 或 koa-multer 间件。 1. koa-body 间件 koa-body 是 Node.js 的一个间件,用于解析 HTTP 请求体的数据,支持多种类型的数据格式,包括 JSON、form 和 text 等,还支持 multipart 类型的数据,也就是文件上传时的 formData。 使用 koa-body 间件解析 formData,需要设置 multipart 参数为 true,如下所示: ```javascript const Koa = require('koa'); const koaBody = require('koa-body'); const app = new Koa(); app.use(koaBody({ multipart: true, })); app.use(async (ctx) => { const file = ctx.request.files.file; console.log(file.name); // 输出上传的文件名 }); app.listen(3000); ``` 2. koa-multer 间件 koa-multer 是 Node.js 的一个间件,用于处理文件上传,它支持多种文件上传方式,包括普通上传、多文件上传等。与 koa-body 不同,koa-multer 只处理文件上传,不处理其他类型的请求体数据。 使用 koa-multer 间件解析 formData,需要先创建一个 multer 实例,然后使用该实例的 single 或 array 方法来处理文件上传,如下所示: ```javascript const Koa = require('koa'); const Router = require('koa-router'); const multer = require('@koa/multer'); const app = new Koa(); const router = new Router(); // 创建 multer 实例 const upload = multer({dest: 'uploads/'}); // 处理单个文件上传 router.post('/upload', upload.single('file'), async (ctx, next) => { console.log(ctx.req.file); // 输出上传的文件信息 }); // 处理多个文件上传 router.post('/uploads', upload.array('files', 10), async (ctx, next) => { console.log(ctx.req.files); // 输出上传的文件信息 }); app.use(router.routes()); app.listen(3000); ``` 在上面的示例,创建了一个 multer 实例,然后使用该实例的 single 和 array 方法来处理单个文件上传多个文件上传。在处理上传文件时,需要指定上传文件的字段名,例如 single 方法的 'file',array 方法的 'files'。 综上所述,使用 koa-body 或 koa-multer 间件都可以解析文件上传的 formData。其,koa-body 可以处理不同类型的请求体数据,而 koa-multer 则更加专注于文件上传。开发者可以根据自己的需求选择合适的间件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值