vue实现上传修改头像图片(带后端代码,mvc)

html代码:

<div class="filePic">
     <input type="file"   class="inputPic" @change="upload" name="profilePhoto" allowexts="gif,jpeg,jpg,png,bmp" accept="image/*" >
     <img class="am-circle am-img-thumbnail" src="images/getAvatar.do.jpg" alt="" v-if="member.photo == ''" />
     <img class="am-circle am-img-thumbnail" :src="'../' + profilePhoto" alt="" v-else />
</div>

script(vue)代码:

let app = new Vue({
	el: "#app",
	data:{
		member:{},
		profilePhoto:''
	},
    methods: {
    upload: function(e) {
			this.selectedFile = e.target.files[0];
			const formData = new FormData();
		    formData.append('profilePhoto', this.selectedFile);
			axios.post("/member/upload",  formData).then(rt => {
				if (rt.status == 200 && rt.data.code == 200) {
					this.profilePhoto = rt.data.data;
					alert("修改头像成功");
				}else {
					alert("修改头像失败,请稍后重试....");
				}
			})
		}
    }
});

后端代码:

控制层代码:

@PostMapping("/member/upload")
public Map<String, Object> upload(@RequestParam("profilePhoto") MultipartFile profilePhoto, HttpSession session) {
		MemberInfo member = (MemberInfo) session.getAttribute("currentLoginMemberInfo");
		Long mno = member.getMno();
		
		String savePath = ""; // 头像保存的路径
		File dest = null;
		if (profilePhoto != null && profilePhoto.getSize() > 0) {
			try {
				savePath = "fruitmall_files" + "/" + "member" + "/" + System.currentTimeMillis() + "_" + profilePhoto.getOriginalFilename();
				dest = new File("D:/", savePath);
				profilePhoto.transferTo(dest); // 上传头像
			} catch (IllegalStateException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("mno", mno);
		map.put("photo", savePath);
		
		Map<String, Object> resultVO = new HashMap<String, Object>(); // 创建map对象传回前端进行响应
		
		int result = memberInfoService.upload(map); // 转服务层执行查询语句得到返回值
		if (result == -1) { // 查询语句未执行成功
			resultVO.put("code", 500);
			resultVO.put("msg", "数据错误");
			return resultVO;
		} else { // 查询语句执行成功
			// 将头像存入session
			member.setPhoto(savePath);
			session.setAttribute("currentLoginMemberInfo", member);
			
			resultVO.put("code", 200);
			resultVO.put("msg", "上传头像成功");
			resultVO.put("data", savePath);
			return resultVO;
		}
	}

服务层代码:

@Override
public int upload(Map<String, Object> map) {
	if (StringUtil.checkNull(map.get("mno"), map.get("photo"))) {
		return -1;
	}
	return memberInfoMapper.upload(map);
}

mapper层查询语句:

<update id="upload" parameterType="map">
		update memberinfo set photo=#{photo} where mno=#{mno}
</update>

StringUtil工具代码:

public class StringUtil {

	public static boolean checkNull(String ... strs) {
		if (strs == null || strs.length <= 0) {
			return true;
		}
		
		for (String str : strs) {
			if(str == null || "".equals(str)) {
				return true;
			}
		}
		
		return false;
	}
	
	public static boolean checkNull(Object ... objs) {
		if (objs == null || objs.length <= 0) {
			return true;
		}
		
		for (Object obj : objs) {
			if(obj == null || "".equals(obj)) {
				return true;
			}
		}
		
		return false;
	}

}

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue2 前端上传图片到后端,一般可以使用以下步骤: 1. 创建一个表单,包含一个类型为 `file` 的输入框,用于选择要上传的图片文件。 2. 在 Vue 组件中,监听文件选择事件,获取选中的文件。 3. 使用 `FormData` 对象创建一个表单数据对象,将选中的文件添加进去。 4. 发送 `POST` 请求到后端,携表单数据对象作为请求体。 5. 在后端中,使用框架提供的文件上传功能,将文件保存到服务器指定的目录中。 以下是一个简单的示例代码前端部分(Vue 组件): ```html <template> <div> <form @submit.prevent="upload"> <input type="file" ref="fileInput" @change="handleFileSelect"> <button type="submit">上传</button> </form> </div> </template> <script> export default { data() { return { selectedFile: null }; }, methods: { handleFileSelect(event) { this.selectedFile = event.target.files[0]; }, upload() { const formData = new FormData(); formData.append("image", this.selectedFile); axios.post("/api/upload", formData).then(response => { // 处理上传成功后的响应 }); } } }; </script> ``` 后端部分(使用 Express 框架): ```javascript const express = require("express"); const multer = require("multer"); const app = express(); const upload = multer({ dest: "uploads/" }); app.post("/api/upload", upload.single("image"), (req, res) => { // req.file 包含上传的文件信息 res.send("上传成功!"); }); app.listen(3000, () => { console.log("服务器启动成功!"); }); ``` 在上面的示例代码中,我们使用了 Axios 库发送了一个 POST 请求到 `/api/upload` 接口,请求体中包含了一个名为 `image` 的文件参数,后端使用 Multer 中间件将文件保存到了 `uploads/` 目录下。你可以根据自己的需求来修改这个示例代码

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值