uniapp同时上传多张图片+node后台接收

uniapp同时上传多张图片+node后台接收

uniapp方面代码

  • uni.unloadFile方法中files 参数是一个 file 对象的数组,file 对象的key值分别为name,uri。因为文档中写了name不填或填的值相同,可能会导致服务端读取文件的时候只能读取到一个文件,所以我们要把name的值写成不同的值。
uni.chooseImage({         //选择图片
	count:9,
	sizeType:["compressed"],
	success(res) {
		console.log(res)
		let img = [];
		for (let i = 0; i < res.tempFilePaths.length; i++) {  
			let obj = new Object();  
			obj.name = `file`+(i);  
			obj.uri = res.tempFilePaths[i];  
			img.push(obj);  
			obj = null;  
		}	
		console.log(img[0].uri)
		uni.uploadFile({     //上传代码
			url:"http://localhost:3000/upload", //本地node.js服务器地址
			files:img,
			name: 'file',
			formData: {
				userId: '123456',
				Id: '654321',
				type: true,
			},
			success:function(res){
				console.log(res);
			},
			file:function(err){
				console.log(err)
			}
		})
	}
})

node后台代码

  • 需要手动创建tmp文件夹。
  • 使用了express-generator骨架
  • express-generator 是 express 应用生成器,可以快速生成一个应用的骨架
  • 引入了path,formidable模块
  • 解析表单,支持get post请求参数,文件上传等…,可以用来处理post请求。可以处理图片、zip文件等的上传。
    	var form = new formidable.IncomingForm();
    	form.uploadDir="./tmp";//设置文件上传的目录 目录需手动创建
    	form.encoding = 'utf-8';//设置表单域的编码
    	form.keepExtensions = true;//设置该属性为true可以使得上传的文件保持原来的文件的扩展名
    
var express = require('express');
var router = express.Router();
const path=require("path");    
var formidable = require('formidable');//引入formidable模块
router.post("/upload",(req,res)=>{
	var form = new formidable.IncomingForm();
	form.encoding = 'utf-8';//设置表单域的编码
	form.uploadDir = path.join(__dirname + "/../tmp");//设置上传文件存放的文件夹,默认为系统的临时文件夹,可以使用fs.rename()来改变上传文件的存放位置和文件名
	form.keepExtensions = true;//设置该属性为true可以使得上传的文件保持原来的文件的扩展名
	form.parse(req, function (err, fields, fils){
		//fils接收到的是二进制图片文件
		//fields接收到的是formData,也就是其它的附加参数
		let key = Object.keys(fils)
		let sends = []
		for(let j = 0;j<key.length;j++){
			let keyname = key[j]
			var filename = fils[keyname].name;
			var nameArray = filename.split('.')
			var type = nameArray[nameArray.length - 1];
			var name = '';
			for (var i = 0; i < nameArray.length - 1; i++) {
				name = name + nameArray[i];
			}
			var date = new Date();
			var time = '_' + date.getFullYear() + "_" + date.getMonth() + "_" + date.getDay() + "_" + date.getHours() + "_" + date.getMinutes();
			var avatarName = name + time + '.' + type;
			var newPath = form.uploadDir + "/" + avatarName;
			fs.renameSync(fils[keyname].path, newPath);  //重命名
			sends.push("/upload/"+avatarName)
		}
		res.send({data:sends})//返回的信息
	 })
})
module.exports = router;

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值