uniapp实现图片上传功能

最近在自己写一个uniapp的项目,后台用的express,刚好遇到了上传图片到服务器的功能,这里总结一下。

1.前端部分

首先是要打开本地相册选择图片,用的api是uni.chooseImage

uni.chooseImage({
    count: 1, //上传图片的数量,默认是9
    sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
    sourceType: ['album'], //从相册选择
    success: function (res) {
        const tempFilePaths = res.tempFilePaths;    //拿到选择的图片,是一个数组
    }
});

接着是上传图片,用到的api是uni.uploadFile

        uni.chooseImage({
          count:1,
          success:(res)=>{
            const tempFilePaths = res.tempFilePaths;
            uni.uploadFile({
              url:'http://localhost:3000/users/upload',		//post请求的地址
              filePath:tempFilePaths[0],
              name:'avatar',	
              formData: {
                'username': this.userInfo.username  //formData是指除了图片以外,额外加的字段
              },
              success: (uploadFileRes) => {
                //这里要注意,uploadFileRes.data是个String类型,要转对象的话需要JSON.parse一下
                var obj = JSON.parse(uploadFileRes.data);
				...
              }
            })
          }

2.后端部分

后端上传文件到服务器用的是multer

const multer = require('multer');
let storage = multer.diskStorage({
    //配置上传文件需要存放的位置
    destination:function(req,file,cb){
        cb(null,path.join(__dirname,'../public/images/avatar'));
    },
    //配置文件名
    filename:function (req,file,cb) {
        let time = Date.now();
        cb(null, Date.now() + "-" + file.originalname);
    }
});
//创建一个multer对象用来处理文件上传
//multer 可以帮我们解析 content-type:mulipart/form-data这种方式提交的请求数据
var upload = multer({
    storage:storage
});

上传一张图片的时候

//single里的参数是name,也就是传过来的文件的key值,也可以叫name值
router.post('/upload',upload.single('avatar'),async (req, res)=>{
    let newAvatar = req.file.filename;  //获取存放完成的新的文件名
    let user = req.body;
	...
});
  • 14
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值